随笔分类 -  go并发

与go并发编程相关的知识
摘要:一,代码: // 入口函数 func main() { lock:=sync.Mutex{} go func() { lock.Lock() defer lock.Unlock() for i:=1; i<=5; i++ { time.Sleep(time.Millisecond) fmt.Prin 阅读全文
posted @ 2025-03-09 15:10 刘宏缔的架构森林 阅读(29) 评论(0) 推荐(0)
摘要:一,代码: //实现单例的数据结构 type SingleObject struct { } //最终获得的单例对象 var instance *SingleObject //变量one是一个sync.Once的实例 var one sync.Once //方法:得到单例对象 func getIns 阅读全文
posted @ 2025-03-09 13:46 刘宏缔的架构森林 阅读(61) 评论(0) 推荐(0)
摘要:一,代码: // 入口函数 func main() { //无缓冲的channel ch:=make(chan int) go func() { //<-ch for i:=1; i<=5; i++ { time.Sleep(time.Millisecond) fmt.Println(i) } ch 阅读全文
posted @ 2025-03-09 13:21 刘宏缔的架构森林 阅读(33) 评论(0) 推荐(0)
摘要:一,代码: // 入口函数 func main() { ch:=make(chan int,1) go func() { <-ch for i:=1; i<=5; i++ { time.Sleep(time.Millisecond) fmt.Println(i) } }() go func() { 阅读全文
posted @ 2025-03-09 13:06 刘宏缔的架构森林 阅读(61) 评论(0) 推荐(0)
摘要:一,怎么用channel实现锁定? 只有1个缓冲区的channel, 写入数据类似于加锁, 读出数据类似于释放锁 二,代码例子: // 入口函数 func main() { //创建channel对象 ch:=make(chan int,1) //协程1 go func() { ch <- 0 fo 阅读全文
posted @ 2025-03-09 12:54 刘宏缔的架构森林 阅读(42) 评论(0) 推荐(0)
摘要:一,空select语句:会报死锁 代码: // 入口函数 func main() { select{} } 运行结果: $ go run main.go fatal error: all goroutines are asleep - deadlock! goroutine 1 [select (n 阅读全文
posted @ 2025-03-01 20:55 刘宏缔的架构森林 阅读(75) 评论(0) 推荐(0)
摘要:一,并发时不使用channel,直接访问变量(共享内存) 代码: // 入口函数 func main() { //共享访问的切片 var ints []int var wg sync.WaitGroup //定义协程的数量 n:=10000 //定义wg的数量 wg.Add(n) //创建指定数量的 阅读全文
posted @ 2025-03-01 20:54 刘宏缔的架构森林 阅读(32) 评论(0) 推荐(0)