近些年 go 语言越来越多的被用在公司的开发中,同时学习go语言的朋友越来越多,小猿圈也为了跟上时代的脚步,给大家整理一些用go语言实现协程安全的几种方式。
1.channel - monitor goroutine
var deposits =make(chan int) // send amount to deposit
var balances =make(chan int) // receive balance
func Deposit(amountint) { deposits <- amount }
func Balance()int { return <-balances }
func teller() {
var balance int // balance is confined toteller goroutine
for {
select {
case amount := <-deposits:
balance += amount
case balances <- balance:
}
}
}
func init() {
go teller() // start the monitor goroutine
}
2.channel - serial confinement
type Cake struct{state string }
func baker(cookedchan<- *Cake) {
for {
cake := new(Cake)
cake.state = "cooked"
cooked <- cake // baker nevertouches this cake again
}
}
func icer(icedchan<- *Cake, cooked <-chan *Cake) {
for cake := range cooked {
cake.state = "iced"
iced <- cake // icer nevertouches this cake again
}
}
3.mutual exclusion
import"sync"
var mu sync.Mutex // guards balance
var balance int
func Deposit(amountint) {
mu.Lock()
balance = balance + amount
mu.Unlock()
}
func Balance() int{
mu.Lock()
defer mu.Unlock()
return balance
}
4.mutual exclusion - RWMutex
import"sync"
var mu sync.RWMutex // guards balance
var balance int
func Deposit(amountint) {
mu.Lock()
balance = balance + amount
mu.Unlock()
}
func Balance() int{
mu.RLock() //readers lock
defer mu.RUnlock()
return balance
}
RLock允许读取并行,写入和读取完全互斥,多次读取,一次写入
5.Lazy Initialization - sync.Once
var loadIconsOncesync.Once
var iconsmap[string]image.Image
//Concurrency-safe.
func Icon(namestring) image.Image {
loadIconsOnce.Do(loadIcons)
return icons[name]
不知道大家有没有学习到,希望大家可以关注我,也可以分享给需要的朋友,小猿圈会持续更新go语言知识的,记得点赞哦!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Trading and Exchanges
Larry Harris / Oxford University Press, USA / 2002-10-24 / USD 95.00
This book is about trading, the people who trade securities and contracts, the marketplaces where they trade, and the rules that govern it. Readers will learn about investors, brokers, dealers, arbit......一起来看看 《Trading and Exchanges》 这本书的介绍吧!