c++ - 如何使用原子原语编写自己的条件变量

标签 c++

我需要编写自己的条件变量实现,就像 pthread_cond_t 一样。

我知道我需要使用编译器提供的原语,如 __sync_val_compare_and_swap 等。

有谁知道我会怎么做。

谢谢

最佳答案

条件变量的正确实现困难。改用许多库之一(例如 boost、pthreads-win32、我的 just::thread 库)

你需要:

  • 保留一个等待线程的列表(这可能是一个“虚拟”列表而不是实际的数据结构)
  • 确保当线程等待时,您自动解锁等待线程拥有的互斥锁,并在该线程进入阻塞操作系统调用之前将其添加到列表中
  • 确保当通知条件变量时,唤醒当时正在等待的线程之一,而不是稍后等待的线程
  • 确保在广播条件变量时唤醒当时正在等待的所有线程,而不是任何稍后等待的线程。
  • 加上其他暂时想不起来的问题。

细节因操作系统而异,因为您依赖于操作系统阻塞/唤醒原语。

关于c++ - 如何使用原子原语编写自己的条件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710017/

相关文章:

c++ - 用于禁用 C++ “features” 的编译器选项

c++ - 使用Vector实现Stack的问题

c++ - SpriteSheet 动画 -> 滞后?

c++ - 如何使用类方法映射 MFC 工具栏按钮事件?

c++ - primary-expression before ']'错误含义

c# - 为什么构造函数总是与类同名,以及它们是如何被隐式调用的?

c++ - 使用 C++0x : call to deleted constructor of 时的 clang++ 错误消息

c++ - vscode智能感知找不到cmake项目中包含的头文件

c++ - 广度优先或深度优先搜索

c++ - 矩阵连续n个数的最大乘积