信号量Semaphore实现两线程同步c++代码
时间: 2024-03-23 20:40:35 浏览: 88
下面是一个使用Semaphore实现两线程同步的C++代码:
```c++
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <semaphore.h>
using namespace std;
sem_t sem;
void thread1() {
cout << "Thread 1 is running." << endl;
sem_post(&sem); // 发送信号量
}
void thread2() {
sem_wait(&sem); // 等待信号量
cout << "Thread 2 is running." << endl;
}
int main() {
sem_init(&sem, 0, 0); // 初始化信号量
thread t1(thread1);
thread t2(thread2);
t1.join();
t2.join();
sem_destroy(&sem); // 销毁信号量
return 0;
}
```
这个例子中,我们使用了`sem_t`和`sem_init()`、`sem_wait()`、`sem_post()`、`sem_destroy()`四个函数来实现Semaphore。`sem_t`是一个结构体类型,用于存储Semaphore的信息。`sem_init()`函数用于初始化Semaphore,第一个参数是Semaphore结构体指针,第二个参数是0表示这个Semaphore是用于线程间同步的,第三个参数是Semaphore的初值,这里设为0。`sem_wait()`函数用于等待Semaphore的信号,如果Semaphore的值为0,则该函数阻塞线程,直到Semaphore的值大于0;如果Semaphore的值大于0,则该函数将Semaphore的值减1,然后线程继续执行。`sem_post()`函数用于发送Semaphore的信号,将Semaphore的值加1,表示Semaphore可以被下一个等待的线程使用。`sem_destroy()`函数用于销毁Semaphore。
在这个例子中,我们创建了两个线程,线程1通过调用`sem_post()`函数发送Semaphore的信号,线程2通过调用`sem_wait()`函数等待Semaphore的信号。由于Semaphore的初值为0,线程2会在等待Semaphore的信号时被阻塞,直到线程1发送了Semaphore的信号。这样就实现了两个线程的同步。
阅读全文