Linux系统中C++如何使用信号量
导读:在Linux系统中,C++可以使用POSIX信号量(semaphore)来实现进程间或线程间的同步。POSIX信号量是一种计数器,用于控制多个进程或线程对共享资源的访问。以下是如何在C++中使用POSIX信号量的基本步骤: 包含头文件:...
在Linux系统中,C++可以使用POSIX信号量(semaphore)来实现进程间或线程间的同步。POSIX信号量是一种计数器,用于控制多个进程或线程对共享资源的访问。以下是如何在C++中使用POSIX信号量的基本步骤:
- 包含头文件:
#include <
semaphore.h>
#include <
fcntl.h>
#include <
unistd.h>
#include <
iostream>
- 初始化信号量:
sem_t semaphore;
sem_init(&
semaphore, 0, 1);
// 第一个参数是信号量的指针,第二个参数是信号量的属性(0表示进程共享,1表示线程共享),第三个参数是初始值
- 使用信号量:
sem_wait(&
semaphore);
// 等待信号量,如果信号量的值大于0,则将其减1并继续执行;如果信号量的值为0,则阻塞等待
// 访问共享资源
sem_post(&
semaphore);
// 将信号量的值加1,唤醒等待的进程或线程
- 销毁信号量:
sem_destroy(&
semaphore);
下面是一个简单的示例,演示了如何使用信号量来同步两个线程对共享资源的访问:
#include <
semaphore.h>
#include <
pthread.h>
#include <
iostream>
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
。通过使用信号量,我们确保了在任何时候只有一个线程可以访问共享资源。最后,我们销毁信号量并输出共享资源的值。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux系统中C++如何使用信号量
本文地址: https://pptw.com/jishu/733793.html