c++ 怎么实现一个线程退出时,强制另一个线程也退出
时间: 2024-10-07 13:05:09 浏览: 32
在 C++ 中,当一个线程需要在另一个线程退出时强制执行,通常可以借助于一些同步机制,如互斥锁、条件变量(condition_variable)、事件(event)等。这里提供一种常见的解决方案,即使用 `std::condition_variable` 和一个共享的状态标志:
```cpp
#include <thread>
#include <mutex>
#include <condition_variable>
// 状态标志,表示是否应停止线程
std::atomic<bool> stop_request{false};
std::mutex stop_mutex;
std::condition_variable stop_condition;
void thread_function() {
while (!stop_request.load()) { // 当 stop_request 未改变时持续工作
// ... 你的线程任务
std::unique_lock<std::mutex> lock(stop_mutex);
stop_condition.wait(lock, [] { return stop_request.load(); }); // 如果 stop_request 变为 true,则唤醒并退出
}
}
void request_stop() {
std::lock_guard<std::mutex> lock(stop_mutex);
stop_request.store(true); // 设置停止请求
stop_condition.notify_one(); // 唤醒正在等待的线程
}
int main() {
std::thread worker_thread(thread_function);
// 某处需要让线程退出时
request_stop();
worker_thread.join(); // 主线程等待工作线程结束
return 0;
}
```
在这个例子中,`request_stop()` 函数会设置状态标志 `stop_request` 为 `true` 并唤醒等待的线程。`thread_function` 在循环内部检查这个标志,如果为真就退出。
阅读全文