linux下的互斥锁问题
大虾们帮帮忙,看看我的代码,很简单
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t qlock = PTHREAD_MUTEX_INITIALIZER;
pthread_t tid1, tid2, tid3;
void *thrd_1( void *arg)
{
pthread_mutex_lock(&qlock);
printf("thred_1..test1\n");
sleep(2);
printf("thred_1...test2\n");
sleep(2);
printf("thred_1..test3\n");
sleep(2);
printf("thred_1..test4\n");
sleep(2);
printf("thred_1..test5\n");
sleep(2);
printf("thred_1..test6\n");
sleep(2);
pthread_mutex_unlock(&qlock);
}
void *thrd_2(void *arg)
{
pthread_mutex_lock(&qlock);
sleep(2);
printf("thred_2..test2\n");
printf("thred_2..test1\n");
sleep(2);
printf("thred_2..test3\n");
sleep(2);
printf("thred_2..test4\n");
sleep(2);
printf("thred_2..test5\n");
sleep(2);
printf("thred_2..test6\n");
sleep(2);
pthread_mutex_unlock(&qlock);
}
void *thrd_3()
{
printf("thrd_3....test1\n");
sleep(2);
printf("thrd_3....test2\n");
sleep(2);
printf("thrd_3....test3\n");
sleep(2);
printf("thrd_3....test4\n");
sleep(2);
printf("thrd_3....test5\n");
sleep(2);
printf("thrd_3....test6\n");
}
int main()
{
int ret;
ret = pthread_create(&tid1,NULL,thrd_1, NULL);
ret = pthread_create(&tid2,NULL,thrd_2, NULL);
ret = pthread_create(&tid3,NULL,thrd_3, NULL);
while(1){
printf("main sleep\n");
sleep(2);
};
return 0;
}
就是创建了三个线程,三个线程都是每隔两秒打印一次printf函数,其中的话第一个线程跟第二个线程加锁,但第三个线程没有加锁,理论上如果假设第一个线程创建出来,它加上锁之后是不是应该把锁之中的printf都输出完后在执行别的,但是结果却不是这样,在线程1打印printf的过程中,线程3中的printf也打印了出来,结果如下: