读书人

linux下的互斥锁有关问题

发布时间: 2013-08-04 18:26:16 作者: rapoo

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下的互斥锁有关问题







Linux 多线程


[解决办法]
你的锁只是在线程1和线程2之间互斥,线程3和主线程为什么不能输出。另外,像这种使用线程锁严格情况下应该只是在原子的上下文使用。

读书人网 >UNIXLINUX

热点推荐