1.对一个锁反复lock。
2.两个线程,各自持有一把锁,去请求另一把锁。
第二种死锁是什么意思 是线程1有了共享资源1的锁 但是不去解锁 然后去请求资源二的锁吗
pthread_mutex_t mutex1, mutex2;
int var2 = 200;
int var1 = 100;
void *tfn(void * arg)
{
while(1){
printf("------------------pthread\n");
pthread_mutex_lock(&mutex2); //加锁---2
var2 = 250;
printf("var2 = %d\n", var2);
//pthread_mutex_unlock(&mutex2); //解锁---2
sleep(1);
pthread_mutex_lock(&mutex1); //加锁 ---1
var1 = 150;
printf("var1 = %d\n", var1);
pthread_mutex_unlock(&mutex1); //解锁 ---1
sleep(1);
}
return NULL;
}
int main(void)
{
pthread_t tid;
printf("var1 = %d var2 = %d\n", var1, var2);
sleep(3);
pthread_create(&tid, NULL, tfn, NULL);
while(1){
printf("------------------main\n");
pthread_mutex_lock(&mutex1); //加锁 ---1
var1 = 11111111;
printf("var1 = %d\n", var1);
//pthread_mutex_unlock(&mutex1); //解锁 ---1
sleep(1);
pthread_mutex_lock(&mutex2); //加锁---2
var2 = 22222222;
printf("var2 = %d\n", var2);
pthread_mutex_unlock(&mutex2); //解锁---2
sleep(1);
}
pthread_join(tid, NULL);
return 0;
}
运行结果也是阻塞 但是我对1没解锁 2直接对1去请求上锁了 所以阻塞了 是这个意思吗