如下同样逻辑的代码,用 C++ 实现与用 Go 实现结果完全不一样. C++ 代码能够正常运行,而 Golang 代码直接死锁(即使强制调度也是死锁).简单分析:C/C++ 锁粒度是线程级别,线程调度由内核提供. Golang 锁粒度为协程级别,多个协程的底层运行可能会在同一个M上,而且协程调度会导致执行一半的代码被挂起,会导致两个协程同时满足条件进入等待,从而产生死锁.package main
转载
2021-05-08 16:25:55
364阅读
2评论