死锁:
第一种:
加了两次锁,导致还没解锁就想获得锁,一直阻塞:
void*mythread(void *arg)
{int n=5000;int x;while(n--){pthread_mutex_lock(&mutex);pthread_mutex_lock(&mutex);x=number;x++;number=x;pthread_mutex_unlock(&mutex);}
}
第二种:
加了锁,却没解锁:
void*mythread(void *arg)
{int n=5000;int x;while(n--){pthread_mutex_lock(&mutex);pthread_mutex_lock(&mutex);x=number;x++;number=x;}
}
第三种:
线程A拥有A锁,请求获得B锁;线程B拥有B锁,请求获得A锁,这样导致造成线程A和线程B都不释放自己的锁,而且还想获得对方的锁,从而导致死锁。
如何解决死锁:
- 让线程按照一定的顺序去访问共享资源
- 在访问其他锁的时候,需要将自己的锁解开
- 调用pthread_mutex_trylock,如果加锁不成功立刻返回。