*
* 程序中使用一个以上的互斥量造成程序死锁
*/
#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);
}