Semaphore与Mutex

jc *_*ics 1 c++ multithreading synchronization

我正在阅读一些Mutex和信号量.

我有一段代码

int func()
{
 i++;
 return i;
}
Run Code Online (Sandbox Code Playgroud)

我在外面被宣布为全局变量.如果我创建计数信号量计数为3将不会有竞争条件?这是否意味着我应该在这种情况下使用二进制信号量或互斥量?

有人可以给我一些实用的方案,其中可以使用互斥锁,临界区和信号量.

可能我读了很多.最后我现在有点困惑.有人可以清除这个想法.

PS:我已经明白互斥信号和二进制信号量之间的主要区别是所有权.计算信号量应该用作信令机制.

ste*_*anv 7

互斥体和信号量之间的差异(我从未使用过CriticalSection):

  • 使用条件变量时,其锁定必须是互斥锁.
  • 使用多于1个可用资源时,必须使用使用可用资源数初始化的信号量,因此当资源不足时,下一个线程会阻塞.
  • 当使用1个资源或一些只能由1个线程执行的代码时,您可以选择使用互斥锁或用1初始化的信号量(这是OP问题的情况).
  • 当让线程等到另一个线程发出信号时,你需要一个初始化为0的信号量(等待线程执行sem.p(),信令线程执行sem.v()).