如何在C中实现无锁共享标志?

bro*_*s94 5 c sync lock-free

我有一个生产者一个消费者模型,我需要生产者在数据可用时设置一个标志.我怀疑我可以在没有锁定共享标志的情况下离开,因为:

  • 生产者在设置之前从不检查该值
  • 偶尔错过对标志的更新不是问题(虽然我可能也可以使用原子操作来避免这种情况?).

所以我的问题是,我该如何实现呢?我对volatile关键字的理解,以及像__sync_synchronize()这样的事情充其量是微不足道的,所以假设我知之甚少.具体来说,我希望能够确保在其他线程中及时看到对标志的更改.

编辑:我在Linux上使用GCC.

Mih*_*ncu 0

原子操作意味着(非常简单地)阻塞其他原子操作,直到第一个操作完成。

我假设我们正在谈论线程,因此我们应该考虑互斥体(但这也适用于进程和信号量)。可以检查(读取)互斥锁(或信号量),而无需尝试获取锁。

如果互斥量(信号量)的状态是已锁定,请继续进行其他操作,稍后再试。