std::condition_variable和std::mutex可以不配合全局变量使用吗
时间: 2024-01-04 07:19:32 浏览: 67
std::condition_variable和std::mutex通常需要配合使用,以实现线程之间的同步和通信。std::mutex用于保护共享资源,而std::condition_variable用于在特定条件下等待和唤醒线程。
当一个线程需要等待某个条件满足时,它可以调用std::condition_variable的wait()函数,该函数会使线程进入等待状态,并释放对std::mutex的锁定。当其他线程满足了条件并调用了std::condition_variable的notify_one()或notify_all()函数时,等待的线程会被唤醒并重新获得对std::mutex的锁定,然后继续执行。
因此,std::condition_variable和std::mutex通常需要配合使用,以实现线程之间的同步和通信。如果不使用全局变量,那么线程之间无法共享条件变量和互斥锁,就无法实现线程之间的同步和通信。
示例代码如下所示:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex g_mutex;
std::condition_variable g_cv;
bool g_flag = false;
void thread_func()
{
std::unique_lock<std::mutex> lock(g_mutex);
while (!g_flag)
{
g_cv.wait(lock);
}
std::cout << "Thread is awake!" << std::endl;
}
int main()
{
std::thread t(thread_func);
std::this_thread::sleep_for(std::chrono::seconds(2));
{
std::lock_guard<std::mutex> lock(g_mutex);
g_flag = true;
}
g_cv.notify_one();
t.join();
return 0;
}
```
阅读全文