当前位置: 技术问答>linux和unix
linux下的互斥锁问题
来源: 互联网 发布时间:2017-04-18
本文导语: 大虾们帮帮忙,看看我的代码,很简单 #include #include pthread_mutex_t qlock = PTHREAD_MUTEX_INITIALIZER; pthread_t tid1, tid2, tid3; void *thrd_1( void *arg) { pthread_mutex_lock(&qlock); printf("thred_1..test1n"); sleep(2); printf("thred_1...test2n"...
大虾们帮帮忙,看看我的代码,很简单
#include
#include
pthread_mutex_t qlock = PTHREAD_MUTEX_INITIALIZER;
pthread_t tid1, tid2, tid3;
void *thrd_1( void *arg)
{
pthread_mutex_lock(&qlock);
printf("thred_1..test1n");
sleep(2);
printf("thred_1...test2n");
sleep(2);
printf("thred_1..test3n");
sleep(2);
printf("thred_1..test4n");
sleep(2);
printf("thred_1..test5n");
sleep(2);
printf("thred_1..test6n");
sleep(2);
pthread_mutex_unlock(&qlock);
}
void *thrd_2(void *arg)
{
pthread_mutex_lock(&qlock);
sleep(2);
printf("thred_2..test2n");
printf("thred_2..test1n");
sleep(2);
printf("thred_2..test3n");
sleep(2);
printf("thred_2..test4n");
sleep(2);
printf("thred_2..test5n");
sleep(2);
printf("thred_2..test6n");
sleep(2);
pthread_mutex_unlock(&qlock);
}
void *thrd_3()
{
printf("thrd_3....test1n");
sleep(2);
printf("thrd_3....test2n");
sleep(2);
printf("thrd_3....test3n");
sleep(2);
printf("thrd_3....test4n");
sleep(2);
printf("thrd_3....test5n");
sleep(2);
printf("thrd_3....test6n");
}
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 sleepn");
sleep(2);
};
return 0;
}
就是创建了三个线程,三个线程都是每隔两秒打印一次printf函数,其中的话第一个线程跟第二个线程加锁,但第三个线程没有加锁,理论上如果假设第一个线程创建出来,它加上锁之后是不是应该把锁之中的printf都输出完后在执行别的,但是结果却不是这样,在线程1打印printf的过程中,线程3中的printf也打印了出来,结果如下:
|
你的锁只是在线程1和线程2之间互斥,线程3和主线程为什么不能输出。另外,像这种使用线程锁严格情况下应该只是在原子的上下文使用。