日期:2014-05-16  浏览次数:20699 次

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也打印了出来,结果如下:




 

 

 
Linux 多线程