C++线程加锁让线程挂起的demo
时间: 2023-10-31 20:04:35 浏览: 79
下面是一个简单的 C++ 线程加锁让线程挂起的示例:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
std::mutex mtx;
void func()
{
std::cout << "Thread starts" << std::endl;
mtx.lock();
std::cout << "Thread is locked" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5)); // 让线程挂起 5 秒
mtx.unlock();
std::cout << "Thread is unlocked" << std::endl;
}
int main()
{
std::thread t(func);
std::this_thread::sleep_for(std::chrono::seconds(1)); // 让主线程挂起 1 秒,确保子线程已经开始执行
mtx.lock(); // 主线程加锁
std::cout << "Main thread is locked" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5)); // 让主线程挂起 5 秒
mtx.unlock();
std::cout << "Main thread is unlocked" << std::endl;
t.join(); // 等待子线程执行结束
return 0;
}
```
这个程序会创建一个子线程,在子线程中调用 `mtx.lock()` 加锁,然后调用 `std::this_thread::sleep_for(std::chrono::seconds(5));` 让线程挂起 5 秒,最后调用 `mtx.unlock()` 解锁。
在主线程中,先调用 `std::this_thread::sleep_for(std::chrono::seconds(1));` 让子线程运行一段时间,然后调用 `mtx.lock()` 加锁,也会让主线程挂起。在主线程挂起期间,子线程会被阻塞在加锁处,等待主线程释放锁。
当主线程挂起 5 秒后,调用 `mtx.unlock()` 解锁,子线程才会继续执行。最终,主线程会等待子线程执行结束,然后程序退出。
阅读全文