c++多线程修改sleep
时间: 2023-11-17 16:51:31 浏览: 38
多线程修改sleep的一个常见方法是使用条件变量来控制线程的执行顺序。通过引入一个状态变量和两个条件变量,可以实现线程之间的同步和顺序执行。具体步骤如下:
1. 定义一个互斥锁mutex和两个条件变量cv_1、cv_2。
2. 定义一个静态变量point来记录线程间的状态。
3. 在add函数中,线程1通过互斥锁获取锁资源,并在状态为0时执行相应的操作。如果point的值能够被5整除,则修改状态为1,并唤醒等待在cv_1上的线程2。
4. 在print函数中,线程2通过互斥锁获取锁资源,并在状态为1时执行相应的操作。输出point的值后,修改状态为0,并唤醒等待在cv_1上的线程1。
5. 在主函数中创建两个线程t1和t2,并分别执行add和print函数。等待两个线程执行完毕后退出。
代码示例:
```c
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
mutex mt;
condition_variable cv_1;
static int point = 0;
int status = 0;
void add() {
int times = 100;
while (times--) {
unique_lock<mutex> lk(mt);
while (status != 0) {
cv_1.wait(lk);
}
point++;
if (point % 5 == 0) {
status = 1;
cv_1.notify_one();
}
}
}
void print() {
int times = 100 / 5;
while (times--) {
unique_lock<mutex> lk(mt);
while (status != 1) {
cv_1.wait(lk);
}
cout << "point: " << point << endl;
status = 0;
cv_1.notify_one();
}
}
int main() {
thread t1 = thread(add);
thread t2 = thread(print);
t1.join();
t2.join();
return 0;
}
```