死锁

造成死锁的原因

(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\n", 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锁上

解决方法

  1. 使线程安装一定顺序去访问共享资源
  2. 在访问其他锁的时候, 需要先将自己的锁打开
  3. 使用trylock
posted @ 2019-04-19 21:36  张飘扬  阅读(94)  评论(0编辑  收藏  举报