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