可以使用布尔标志而不是信号量吗?

时间:2016-03-18 00:53:57

标签: semaphore

Semaphore负责发信号通知资源是免费还是被使用。我们不能用布尔标志替换它。信号量与旗帜有何不同?

1 个答案:

答案 0 :(得分:0)

信号量计数;一个递增和递减它们 - 它们告诉您有多少资源可用并允许您等待一个。布尔值不计算。

线程安全使用布尔值需要一些其他同步机制。主要风险是这样的代码:

if(!flag) {
    flag = true;
    ...

...导致两个线程同时检查flag并在设置之前继续进行。

一个相当常见的汇编指令是原子测试和设置(或清除),它将两件事作为单个原子步骤。这通常用于基本同步。