C++ 的Semaphore
时间: 2024-08-14 20:09:29 浏览: 41
在 C++ 中,Semaphore(信号量)是一种同步原语,它是一个计数器,通常用于控制对共享资源的竞争访问。Semaphore 提供了一种互斥访问机制,可以用来解决多线程环境下的同步和通信问题。
一个简单的 Semaphore 实例初始化时有一个初始计数值,当有线程尝试获取(wait)信号量时,如果当前计数值大于0,计数器减一,线程继续执行;若计数器为0,则线程会被阻塞直到其他线程释放一个信号(signal)。同样,当线程试图释放一个信号时,如果还有其他线程等待,计数器加一并唤醒一个等待线程。
Semaphore 示例代码如下:
```cpp
#include <semaphore.h>
using namespace std;
Semaphore semaphore(0); // 初始化为0,表示开始没有信号
void thread_function() {
for (int i = 0; i < 3; ++i) {
if (!semaphore.Wait()) { // 如果没有信号,线程会被阻塞
cout << "Thread is blocked!" << endl;
}
// 执行任务...
cout << "Thread is working... (" << i+1 << "/" << 3 << ")" << endl;
semaphore.Signal(); // 当任务完成后,释放一个信号
}
}
int main() {
thread t(thread_function);
t.join();
return 0;
}
```
阅读全文