摘要: 针对整数数据类型(int32、uint32、int64、uint64)我们还可以使用原子操作来保证并发安全,通常直接使用原子操作比使用锁操作效率更高。Go语言中原子操作由内置的标准库sync/atomic提供。 atomic包 方法解释 func LoadInt32(addr *int32) (va 阅读全文
posted @ 2022-03-22 16:05 ☞@_@ 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 1、sync.WaitGroup Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法: 方法名功能 func (wg * WaitGroup) Add(delta int) 计数器+delta (wg *WaitGroup) Done() 阅读全文
posted @ 2022-03-22 15:57 ☞@_@ 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 1、竞态问题 多个 goroutine 同时操作一个资源(临界区)的情况,这种情况下就会发生竞态问题。 2、互斥锁 互斥锁是一种常用的控制共享资源访问的方法,它能够保证同一时间只有一个 goroutine 可以访问共享资源。Go 语言中使用sync包中提供的Mutex类型来实现互斥锁。 sync.M 阅读全文
posted @ 2022-03-22 15:25 ☞@_@ 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 1、select的使用方法 Select 的使用方式类似于之前学到的 switch 语句,它也有一系列 case 分支和一个默认的分支。每个 case 分支会对应一个通道的通信(接收或发送)过程。select 会一直等待,直到其中的某个 case 的通信操作完成时,就会执行该 case 分支对应的语 阅读全文
posted @ 2022-03-22 15:09 ☞@_@ 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 1、通道的发送、接收以及关闭 ch := make(chan int) //发送 ch <- 10 // 把10发送到ch中 //接收 x := <- ch // 从ch中接收值并赋值给变量x <-ch // 从ch中接收值,忽略结果 //关闭 close(ch) 2、无缓冲通道和有缓冲通道 无缓冲 阅读全文
posted @ 2022-03-22 15:02 ☞@_@ 阅读(32) 评论(0) 推荐(0) 编辑