与C中的原子操作的内存同步

时间:2015-08-04 22:01:27

标签: c multithreading pointers

我目前正在C中实现并行程序,其中包括消息传递/工作共享/工作窃取组件。基本上,线程将通过向彼此发送指向数据的指针来共享数据。出于多种原因,我认为原子操作最适合我的用例而不是互斥体(即,共享工作,一个线程可以简单地在另一个线程的收件箱中原子地存储指向该工作的指针)。但是,在共享指针时,我有点担心数据的“新鲜度”。我的理解是,当使用C11原子时,不能保证原子地更新变量也会同步内存(这样一个线程执行的突变不会立即变得对从另一个线程接收指针的线程变得可见),如一个线程可以在该指针处缓存过时的数据。我的问题是:

  • 我对使用C11原子分享指针的理解是正确的吗?
  • 如果是这样,我可以利用标准的内存同步方法吗?
  • 如果没有,GCC原​​子扩展中是否有更好的解决方案?或者我应该避免所有这些,只是使用互斥锁,即使它们是我的目的的重量级解决方案?

0 个答案:

没有答案