使用信号或信号量对进程进行同步程序设计的C++代码
时间: 2024-11-09 18:30:49 浏览: 66
在C++中,使用信号量(Semaphore)是一种常见的同步工具,它允许控制并发访问共享资源的数量。下面是一个简单的例子,展示了如何使用`std::semaphore`来进行进程同步:
```cpp
#include <iostream>
#include <thread>
#include <semaphore.h> // C++17引入了std::semaphore,如果你的库支持
class SharedResource {
private:
std::semaphore resource_semaphore(5); // 初始化为5个单位的信号量
public:
void process() {
for (int i = 0; i < 10; ++i) {
acquire_resource();
do_something(); // 占有资源的代码
release_resource();
}
}
private:
void acquire_resource() {
if (resource_semaphore.wait()) { // 如果当前可用资源少于信号量值,阻塞线程直到其他线程释放资源
std::cout << "Acquired resource\n";
} else {
std::cout << "Resource is already in use.\n";
}
}
void release_resource() {
resource_semaphore.post(); // 当线程完成任务后,增加信号量计数,唤醒等待的线程
std::cout << "Released resource\n";
}
void do_something() {
// 这里是实际处理业务逻辑的代码
}
};
int main() {
SharedResource shared_res;
std::thread t1(std::bind(&SharedResource::process, &shared_res));
std::thread t2(std::bind(&SharedResource::process, &shared_res));
t1.join();
t2.join();
return 0;
}
```
在这个例子中,`SharedResource`类有一个私有的信号量,用于管理可以同时使用的资源。当线程尝试获取资源时,如果资源不足,就会阻塞,直到有其他线程释放。这有助于防止多个线程同时占用资源。
阅读全文