c++并发编程,多线程问题,死锁
并发编程中的多线程编程中的经典问题:
死锁
产生方式和规避方法。
死锁:
1.两个线程A,B访问共享数据Data,Data被两个互斥量Amutex,Bmutex锁着;
2.线程A访问Data时,先拿到Amutex,后拿到Bmutex;
3.线程B访问Data时,先拿到Bmutex,后拿到Amutex;
4.在运行时的某个时刻,线程A拿到了Amutex,线程B拿到了Bmutex;
5.A等B解锁Bmutex才能继续,B等A解锁Amutex才能继续;
6.A,B线程均进入等待对方解锁的状态,此状态为:死锁。
代码实例:
void A()
{
Amutex.lock();
Bmutex.lock();
vec.push_back(1)