c++ 中如何使用信号量终止sleep线程
时间: 2024-03-18 16:31:59 浏览: 95
在 C++ 中可以使用信号量来终止 `sleep` 线程。以下是一个示例代码:
```c++
#include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool terminate = false;
void sleep_thread(int seconds) {
std::unique_lock<std::mutex> lk(mtx);
cv.wait_for(lk, std::chrono::seconds(seconds), []{ return terminate; });
if (!terminate) {
std::cout << "Thread woke up naturally." << std::endl;
} else {
std::cout << "Thread was interrupted." << std::endl;
}
}
int main() {
std::thread t(sleep_thread, 10);
std::this_thread::sleep_for(std::chrono::seconds(5));
{
std::lock_guard<std::mutex> lk(mtx);
terminate = true;
}
cv.notify_one();
t.join();
return 0;
}
```
在示例代码中,`sleep_thread` 函数将会休眠指定的秒数,当收到终止信号时,会立即被唤醒。调用 `cv.wait_for` 函数时,传入了一个 lambda 表达式,用于判断是否需要继续等待。如果 `terminate` 变量为 true,表示需要终止等待,函数会立即返回。
在主函数中,创建了一个线程 `t`,并在 5 秒后发送终止信号。主线程等待 `t` 线程结束后退出。
阅读全文