关于线程加了锁未解锁和pthread_cleanup_push函数遇到的问题
看了互斥锁的简单介绍后,感觉似乎明白了,然后写了以一段程序测试了一下,却遇到了好几个问题,顿时就感觉糊了。在这里记录一下小菜鸟遇到的问题和解决的过程。
首先是下面的代码:
#include<stdio.h>
#include<pthread.h>
pthread_mutex_t number_mutex = PTHREAD_MUTEX_INITIALIZER;
//互斥锁初始化
int globalnumber = 0,temp;
//全局变量
void write_globalnumber(void *arg)
{
printf("write is running\n");
pthread_mutex_lock (&number_mutex);//加锁
globalnumber++;
printf("write_global = %d\n",globalnumber);
sleep(1);
pthread_mutex_unlock(&number_mutex);//解锁
printf("write again\n");
pthread_exit(0);
}
void read_globalnumber(void *arg)
{
printf("read is running\n");
pthread_mutex_lock (&number_mutex);
temp = globalnumber;
pthread_mutex_unlock (&number_mutex);
printf("read_temp = %d\n",temp);
printf("read is end\n");
}
int main()
{
pthread_t thid2,thid1;
printf("start_temp = %d\n",temp);
pthread_create(&thid2,NULL,(void *)read_globalnumber,NULL);//线程2
pthread_create(&thid1,NULL,(void *)write_globalnumber,NULL);//线程1
sleep(5);
printf("globalnumber = %d\ntemp = %d\n",globalnumber,temp);
return 0;
}
反复执行这段程序,发现会出现以下几种不同的运行结果:
(主要是由于线程不定切换引起的)
(1)
(2)
(3)
(4)