阅读量:3
在 Linux 下,C++ 可以使用 POSIX 信号量(semaphore)来实现进程间或线程间的同步。POSIX 信号量有两种类型:命名信号量和未命名信号量。这里我们主要讨论未命名信号量的使用。
要在 C++ 中使用信号量,需要包含 头文件。以下是一个简单的示例,展示了如何在 C++ 中使用信号量:
#include
#include
#include
#include
sem_t semaphore;
void worker(int id) {
// 等待信号量
sem_wait(&semaphore);
std::cout << "Worker " << id << " is working." << std::endl;
// 释放信号量
sem_post(&semaphore);
}
int main() {
// 初始化信号量,初始值为 3
sem_init(&semaphore, 0, 3);
// 创建 5 个工作线程
std::vector threads;
for (int i = 0; i < 5; ++i) {
threads.push_back(std::thread(worker, i));
}
// 等待所有线程完成
for (auto& t : threads) {
t.join();
}
// 销毁信号量
sem_destroy(&semaphore);
return 0;
}
在这个示例中,我们创建了一个初始值为 3 的信号量。这意味着最多允许 3 个线程同时执行 worker 函数。我们创建了 5 个工作线程,每个线程在执行 worker 函数时会等待信号量,然后执行任务并释放信号量。
编译并运行这个程序,你会看到最多只有 3 个线程同时执行 worker 函数,其他线程会等待信号量被释放。
注意:在实际应用中,你可能需要根据具体需求调整信号量的初始值和操作。同时,为了避免竞争条件,确保在多个线程中对信号量的操作是原子的。
以上就是关于“C++在Linux下如何使用信号量”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm