锁定实际上如何工作

时间:2014-06-02 18:12:23

标签: c multithreading locking

我有一个问题非常简单。 使用全局变量实现一个简单的锁定机制。我无法找到如何防止全局变量从2个进程/线程访问。

我的算法(采取2个过程)

  • 处理p1检查是否设置了变量g,然后不要修改代码。
  • 如果没有设置,则设置然后修改代码。
  • 过程2相同。

执行时我得到了公平的结果,但这是正确的。 如果2个指令不是原子的,那么我对某些架构有疑问,那么如何避免一次访问全局变量。

请给我一些基本的想法。

1 个答案:

答案 0 :(得分:3)

使用原子方法来操纵全局变量。

原子操作是内置的'到 gcc 。虽然它们通常不是“便携式”,但大多数编译器都提供原子操作。

对于GCC,您可以实现以下内容:

if(__sync_bool_compare_and_swap(&g, g, g+1))
   /* Changed by you. */;
else
   /* Another process changed it before you could. Perhaps try again. */