造成死锁的原因
(1)自己锁自己
for (int i = 0; i < MAX; i++) {
// 加锁
pthread_mutex_lock(&mutex);
// 阻塞
pthread_mutex_lock(&mutex);
int cur = number;
cur++;
number = cur;
printf("Thread A, id = %lu, number = %d
", pthread_self(), number);
// 解锁
pthread_mutex_unlock(&mutex);
usleep(10);
}
(2)线程1对共享资源A加锁成功--> A锁; 线程2对共享资源B加锁成功--> B锁
线程1访问共享资源B, 对B加锁--> 线程1阻塞在B锁上
线程2访问共享资源A, 对A加锁--> 线程2阻塞在A锁上
解决方法
- 使线程安装一定顺序去访问共享资源
- 在访问其他锁的时候, 需要先将自己的锁打开
- 使用trylock