如何使用原子基元编写自己的条件变量

Sca*_*ark 2 c++

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

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

有谁知道我该怎么做呢.

谢谢

Ant*_*ams 9

正确实现条件变量是很难的.使用众多库中的一个(例如boost,pthreads-win32,我的just :: thread库)

你需要:

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

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

  • 自我引用产品可能被认为是不合适的,所以我理解你没有链接它.但我可以自由地这样做:[just :: thread](http://www.stdthread.co.uk/) (3认同)