C++多线程 互斥锁
`#include<iostream>
#incldue<thread>
#include<list>
int count=100;
std::mutex mtx;
void sellTicket(int index)
{
while(count>0)
{
mtx.lock();
if(count>0)
{
cout<<"窗口"<<index<<"卖出第:"<<count<<"张票"<<endl;
count--;
}
mtx.unlock();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
int main()
{
list<std::thread>tlist;
for(int i=1< i<=3; i++)
{
tlist.push_back(std::thread(sellTicket,i));
}
for(std::thread &t : list)
{
t.join();
}
cout<<"所有窗口卖票结束";
}
condition_variable cv;
mutex mtx;
unique_guard不仅可以用在简单的临界区代码的互斥操作中,还能用在函数调用的过程中
unique_lock std::mutex lck(mtx);
cv.wait()//使线程进入等待状态,lck.unlock可以把mtx释放掉
cv.notify_all();//通知在CV上等待的线程,起来工作了。
//在cv上等待的线程,收到通知,从等待状态-》阻塞状态-》获取互斥锁了-》线程
lock_guard只能用在简单的临界区代码的互斥操作中