如果条件在 pthreads 中原子地成立,是否可以执行cond_wait
Is it possible to perform a cond_wait if a condition holds true atomically in pthreads?
>我有一个死锁的代码。我想到了如何解决它的一些解决方案,其中之一是以原子方式执行以下操作:
if(!ready)
pthread_cond_wait(&(cond[0]), &(lock[0]));
但是,我不确定是否可以在 pthreads 中原子地执行此操作,因为我在文档中找不到任何内容,也许可能有如何做到这一点的技巧。我不会解释代码的其余部分,因为我认为回答这个问题无关紧要。
谢谢。
它在修改ready
方面是原子的,因为互斥lock[0]
是保留的,并且必须围绕其他线程中ready
的所有修改进行。
请注意,您需要使用 while
而不是 if
,因为即使条件没有改变,等待也可能提前醒来。
相关文章:
- 无论条件是否为true,if总是在c++中执行
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 释放动态分配的内存时是否需要执行此额外步骤
- 是否可以在命令行中将输入参数传递给可执行文件
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 是否可以将具有不同签名的 lambda 存储在 std::vector 中并在函数中执行它们(使用各自的参数)?
- 如何检查参数包是否具有执行顺序中的确切类型
- 在类内和类外的定义处执行类转发声明是否有区别
- 如何检测函数是否执行IO操作
- 检查子类是否执行了方法重写
- Visual Studio 2010 是否执行零初始化
- cv::P oint3f 赋值运算符是否执行"深度"复制?
- 重复Handle()是否执行任何解释性通信(IPC),如果不是为什么目标参数
- SSL是否执行自动重新谈判
- 从另一个成员函数/构造函数调用C++构造函数是否执行初始值设定项列表
- 在线编译器工具是否执行所有操作,或者它们只是检查是否编译
- std::make_shared是否执行值初始化(GCC和clang不同意)
- shared_ptr的删除程序是否执行任何同步?
- 是否执行decltype内的表达式,或者只是检查是否验证