通过计数测试信号量

时间:2010-10-09 16:47:58

标签: multithreading semaphore

有一个article about semaphores on OS X。作者通过在两个线程中递增和递减静态变量来测试信号量。通过信号量保护变量访问,变量最终为零。如果没有后卫,变量最终会有一些虚假的价值。我尝试了代码,它的工作原理。我不明白的是,两个线程的并发访问如何在最终变量值中产生差异。毕竟在我看来,像一堆+ 1s和-1s应该是可以交换的,对吧?我觉得我错过了一些明显的东西,它是什么? :)

1 个答案:

答案 0 :(得分:4)

问题是++ / --不是原子的。它们基本上是三个操作:

  1. 加载
  2. INC / DEC
  3. 存储
  4. 因此,如果两个线程同时加载值并同时存储它。差异将是1而不是2。

    这是样本

    Thread A Thread B
    Load 5   Load 5
    Inc 6    Inc 6
    Store 6  Store 6