mutex用法
#include <mutex> //头文件
#include <thread>
#include <iostream>
using namespace std;
class cls
{
public:
void thread1()
{
m_mutex.lock();
for (int i = 0; i < 10; ++i)
{
cout << "thread1" << endl;
}
m_mutex.unlock();
}
void thread2()
{
std::lock_guard<std::mutex> guard(m_mutex); //guard
for (int i = 0; i < 10; ++i)
{
cout << "thread2" << endl;
}
}
std::mutex m_mutex;
};
int main()
{
cls c;
std::thread t1(&cls::thread1, &c);
std::thread t2(&cls::thread2, &c);
t1.join();
t2.join();
return 0;
}
condition使用
#include <condition_variable> //头文件
#include <mutex>
#include <thread>
#include <iostream>
#include <chrono>
using namespace std;
class cls
{
public:
void thread1()
{
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
m_cond.notify_all();
cout << "notify_all" << endl;
}
void thread2()
{
cout << "enter thread2" << endl;
std::unique_lock<std::mutex> lock(m_mutex);
m_cond.wait(lock);
cout << "leave thread2" << endl;
}
std::condition_variable m_cond;
std::mutex m_mutex;
};
int main()
{
cls c;
std::thread t1(&cls::thread1, &c);
std::thread t2(&cls::thread2, &c);
std::thread t3(&cls::thread2, &c);
t1.join();
t2.join();
t3.join();
return 0;
}
参考:
http://blog.csdn.net/hengyunabc/article/details/33336795