C++ 线程间循环控制:使用条件变量和互斥锁实现暂停和恢复
可以使用条件变量和互斥锁来实现控制循环的暂停和重新启动。具体实现步骤如下:
- 定义一个互斥锁和条件变量:
std::mutex mtx;
std::condition_variable cv;
- 在需要控制的循环中添加互斥锁和条件变量:
void loop() {
while (true) {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock); // 等待条件变量通知
// 循环体
}
}
- 在另一个方法中调用条件变量的 notify_one() 方法来通知循环继续执行:
void resume() {
cv.notify_one(); // 通知条件变量
}
- 在需要暂停循环的地方调用互斥锁的 unlock() 方法来释放锁,并在需要恢复循环的地方调用互斥锁的 lock() 方法来重新获取锁:
void pause() {
mtx.unlock(); // 释放锁
}
void resume() {
mtx.lock(); // 获取锁
cv.notify_one(); // 通知条件变量
}
这样就可以通过条件变量和互斥锁来实现控制循环的暂停和重新启动了。注意,在调用 wait() 方法时,需要传入一个 unique_lock 对象,而不是 lock_guard 对象,因为 wait() 方法需要在等待期间释放锁。
原文地址: https://www.cveoy.top/t/topic/jnUX 著作权归作者所有。请勿转载和采集!