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

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

有谁知道我会怎么做。

谢谢

最佳答案

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

你需要:

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

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

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

    10-13 07:39