【发布时间】:2012-03-01 23:53:03
【问题描述】:
我正在尝试创建一个简单的信号量,它只允许 1 个线程增加计数变量,但我目前所做的似乎不起作用。我的语法有问题还是我完全走错了路? (我将信号量互斥体命名为,因为它的值只能是 0 或 1)
WaitForSingleObject(mutex, 0);
count = count + 1;
ReleaseSemaphore(mutex, 1, NULL);
【问题讨论】:
-
请检查返回值是否存在错误情况,尤其是在多线程代码中,因为您无法通过测试有效地证明它是正确的,所以实际上必须通过构造正确。对于值的原子增量的特定情况,请考虑使用InterlockedIncrement() 或其近亲之一。
-
对于这种情况,关键部分不是更好,或者可能是 Interlocked* 函数集。
标签: multithreading winapi semaphore