不使用std::condition_variable这个
时间: 2023-08-22 07:08:44 浏览: 85
如果不使用 `std::condition_variable`,可以使用信号量来实现线程间的同步。下面是一个示代码,可以创建三个线程分别输出 A、B、C,每个线程输出 8 次:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <semaphore.h>
std::mutex mtx;
sem_t sem;
void printLetter(const char letter, const int total) {
for (int i = 0; i < total; i++) {
sem_wait(&sem); // 等待信号量
std::unique_lock<std::mutex> lock(mtx);
std::cout << letter;
sem_post(&sem); // 发送信号量
}
}
int main() {
sem_init(&sem, 0, 1); // 初始化信号量
std::thread t1(printLetter, 'A', 8);
std::thread t2(printLetter, 'B', 8);
std::thread t3(printLetter, 'C', 8);
t1.join();
t2.join();
t3.join();
std::cout << std::endl;
sem_destroy(&sem); // 销毁信号量
return 0;
}
```
这段代码使用了互斥锁(`std::mutex`)和信号量(`sem_t`)来实现线程间的同步。每个线程在输出前都会先等待信号量,然后通过互斥锁来保护输出操作。在每个线程输出后,会释放信号量,让其他线程可以继续输出。
运行上述代码,可以得到期望的输出结果:ABCABCABCABCABCABCABCABC。
阅读全文