#include
#include
#include
#include
pthread_mutex_t mutex; //互斥锁
int lock_var; //全局变量
void *pthread1(void *arg)
{
int i;
for(i=0;i<2;i++)
{
pthread_mutex_lock(&mutex); //锁定临界区
lock_var++;
printf("pthread1:第%d次循环,第1次打印 lock_var=%d\n",i,lock_var);
sleep(1);
printf("pthread1:第%d次循环,第2次打印 lock_var=%d\n",i,lock_var);
pthread_mutex_unlock(&mutex); //解锁
sleep(1);
}
}
void *pthread2(void *arg)
{
int i;
for(i=0;i<5;i++)
{
pthread_mutex_lock(&mutex);
sleep(1);
lock_var++;
printf("pthread2:第%d次循环,lock_var=%d\n",i,lock_var);
pthread_mutex_unlock(&mutex);
sleep(1);
}
}
int main()
{
pthread_t tid1,tid2;
int ret;
pthread_mutex_init(&mutex,NULL); //互斥锁初始化
ret=pthread_create(&tid1,NULL,pthread1,NULL);
if(ret!=0)
printf("pthread1 failed\n");
ret=pthread_create(&tid2,NULL,pthread2,NULL);
if(ret!=0)
printf("pthread2 failed\n");
pthread_join(tid1,NULL); //等待线程结束
pthread_join(tid2,NULL);
pthread_mutex_destroy(&mutex); //释放mutex资源
return 0;
}
从上可以看出互斥锁使用流程为:
pthread_mutex_init(&mutex,NULL); //互斥锁初始化
…………
//创建线程
pthread_mutex_lock(&mutex);
…………
//全局变量处理代码段
pthread_mutex_unlock(&mutex);
…………
//等待线程结束
pthread_mutex_destroy(&mutex); //释放mutex资源