deadlock
by
死锁
1.自己锁自己:
//定义一把锁
pthread_mutex_t mutex;
void *mythread(void *args)
{
while(1)
{
//加锁两次
pthread_mutex_lock(&mutex);
pthread_mutex_lock(&mutex);
printf("hello");
sleep(rand()%3);
printf("world");
//解锁一次
pthread_mutex_unlock(&mutex);
}
}
- 注意点:线程在异常退出的时候也需要锁
2.A 线程占用着 A 锁,又想去获得 B 锁; B 线程占用着 B 锁,又想去获得 A 锁,两个线程都不释放自己的锁,又想去获得对方的锁,从而造成了死锁
解决方法:
- 需要先释放自己的锁再去获得其他锁
- 避免使用嵌套的锁,让线程按照一定的顺序加锁
- 可以调用 pthread_mutex_trylock 函数加锁,该函数不阻塞,所以不会产生死锁