如果一个stackful coroutine锁住一个mutex(我们先考虑一个非递归mutex)然后yield,当它重新进入执行时,运行它的线程t2
可能和之前的不一样yield t1
之前的一个。那么会发生什么?
如果互斥量是递归互斥量,t1
和t2
谁拥有互斥量?
最佳答案
它只会保持锁定状态。
如果 ren-enter 发生在不同的线程上,则互斥量将被错误的线程拥有,最多导致 UB。
Stackless 协程,另一方面只是变相的开关,所以如果您使用 lock_guard 和类似的启用 RAII 的容器,那么可能会有过多的锁定/解锁,以及 yield
发生时的竞争在锁下
关于c++ - 如果一个堆栈协程锁定一个互斥量然后让出怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25063395/