c++ - 如果一个堆栈协程锁定一个互斥量然后让出怎么办?

标签 c++ c++11 boost-asio

如果一个stackful coroutine锁住一个mutex(我们先考虑一个非递归mutex)然后yield,当它重新进入执行时,运行它的线程t2可能和之前的不一样yield t1 之前的一个。那么会发生什么?

如果互斥量是递归互斥量,t1t2 谁拥有互斥量?

最佳答案

它只会保持锁定状态。

如果 ren-enter 发生在不同的线程上,则互斥量将被错误的线程拥有,最多导致 UB。

Stackless 协程,另一方面只是变相的开关,所以如果您使用 lock_guard 和类似的启用 RAII 的容器,那么可能会有过多的锁定/解锁,以及 yield 发生时的竞争在锁下

关于c++ - 如果一个堆栈协程锁定一个互斥量然后让出怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25063395/

相关文章:

c++ - 如何在 Linux 下安装 Haskell? - 官方文档中的错误?

c++ - C++代码中的 undefined reference 错误

c++ - 为什么 C/C++ 字符串文字声明必须是单行的?

c++ - 候选模板被忽略 : substitution failure(error with clang but not g++)

c++ - 尝试 ping 时提升异常

c++ - QNativeImage : Unable to attach to shared memory segment.

c++ - 如果分离的 std::thread 使用超出范围的对象是否安全?

c++ - any_of 与 find_if

c++ - 循环调用 boost io_service poll

c++ - 使用 boost::asio 监听两个套接字