阅读量:1
在Linux系统中,C++可以使用POSIX信号量(semaphore)来实现进程间或线程间的同步。POSIX信号量是一种计数器,用于控制多个进程或线程对共享资源的访问。以下是如何在C++中使用POSIX信号量的基本步骤:
- 包含头文件:
#include
#include
#include
#include
- 初始化信号量:
sem_t semaphore;
sem_init(&semaphore, 0, 1); // 第一个参数是信号量的指针,第二个参数是信号量的属性(0表示进程共享,1表示线程共享),第三个参数是初始值
- 使用信号量:
sem_wait(&semaphore); // 等待信号量,如果信号量的值大于0,则将其减1并继续执行;如果信号量的值为0,则阻塞等待
// 访问共享资源
sem_post(&semaphore); // 将信号量的值加1,唤醒等待的进程或线程
- 销毁信号量:
sem_destroy(&semaphore);
下面是一个简单的示例,演示了如何使用信号量来同步两个线程对共享资源的访问:
#include
#include
#include
sem_t semaphore;
int shared_resource = 0;
void* thread_func(void* arg) {
for (int i = 0; i < 100000; ++i) {
sem_wait(&semaphore);
++shared_resource;
sem_post(&semaphore);
}
return nullptr;
}
int main() {
sem_init(&semaphore, 0, 1);
pthread_t thread1, thread2;
pthread_create(&thread1, nullptr, thread_func, nullptr);
pthread_create(&thread2, nullptr, thread_func, nullptr);
pthread_join(thread1, nullptr);
pthread_join(thread2, nullptr);
std::cout << "Shared resource value: " << shared_resource << std::endl;
sem_destroy(&semaphore);
return 0;
}
在这个示例中,我们创建了两个线程,它们都访问共享资源shared_resource。通过使用信号量,我们确保了在任何时候只有一个线程可以访问共享资源。最后,我们销毁信号量并输出共享资源的值。
以上就是关于“Linux系统中C++如何使用信号量”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm