产生死锁的两种方式
1.假如程序当中有一个执行流因为结束了当前线程而没有进行解锁操作,由于他没有进行解锁操作,就会使其他想要获取互斥锁的线程进行阻塞,从而产生死锁
2.当程序中有多个互斥锁存在的时候,两个或者多个已经上锁的线程之间互相申请对方的互斥锁资源,就会使双方都陷入永久等待的状态,从而产生死锁
死锁的示例代码(以上第二种情况):
demo7.c
include<stdio.h>
#include<pthread.h>
int g_data = 0;
pthread_mutex_t mutex; //创建全局锁
pthread_mutex_t mutex2; //创建全局锁
void *func1(void* arg)
{
int i;
pthread_mutex_lock(&mutex);//加锁
sleep(1);
pthread_mutex_lock(&mutex2);
for(i = 0;i<5;++i)
{
printf("t1:%ld pthread is create\n",(unsigned long)pthread_self());//获>取id
printf("t1: param is %d\n",*((int* )arg));//取内容
sleep(1);
}
pthread_mutex_unlock(&mutex);//解锁
}
void *func2(void* arg)
{
pthread_mutex_lock(&mutex2);
sleep(1);
pthread_mutex_lock(&mutex);//加锁
printf