*
* 程序中使用一个以上的互斥量造成程序死锁
*/
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
pthread_mutex_t ALock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t BLock = PTHREAD_MUTEX_INITIALIZER;
void* thread1_func(void *arg)
{
pthread_mutex_lock(&ALock);
sleep(2);
printf("thread 1 lock ALock, wanting get BLock...\n");
pthread_mutex_lock(&BLock);
printf("thread 1 get BLock\n");
pthread_mutex_unlock(&BLock);
pthread_mutex_unlock(&ALock);
pthread_exit(NULL);
}
void* thread2_func(void *arg)
{
sleep(1);
pthread_mutex_lock(&BLock);
printf("thread 2 lock BLock, wating get ALock...\n");
pthread_mutex_lock(&ALock);
printf("thread 2 get ALock\n");
pthread_mutex_unlock(&ALock);
pthread_mutex_unlock(&BLock);
pthread_exit(NULL);
}
int main(void)
{
pthread_t thid1, thid2;
pthread_create(&thid1, NULL, thread1_func, NULL);
pthread_create(&thid2, NULL, thread2_func, NULL);
pthread_join(thid1, NULL);
pthread_join(thid2, NULL);
printf("main thread exit\n");
exit(0);
}
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
int a = 6;
int main(void)
{
pthread_mutex_lock(&lock);
pthread_mutex_lock(&lock);
printf("%d\n", a);
pthread_mutex_unlock(&lock);
exit(EXIT_SUCCESS);
}