对于多线程程序来说,同步是指在一定的时间内只允许某一个线程访问某个资源 。 而在
此时间内,不允许其他的线程访问该资源。同步资源的方式:互斥锁、条件变量、读写锁、
信号量。下面介绍下互斥锁
将互斥锁想象成一个只能容纳一个人的洗手间, 当某个人进入洗手间的时候, 可以从
里面将洗手间锁上,其他人只能在互斥锁外面等待那个人出来,才能进去
// 多线程同步、示例10
// 互斥锁同步资源,模拟火车售票系统
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<pthread.h>
#include<unistd.h>
pthread_mutex_t mutex_x = PTHREAD_MUTEX_INITIALIZER;
int itotal_ticket_num = 20;
void *sell_ticket(void* arg)
{
for(int i = 0;i< 20;i++)
{
pthread_mutex_lock(&mutex_x);
if(itotal_ticket_num >0)
{
sleep(1);
printf("sell the %dth \n",20-itotal_ticket_num+1);
itotal_ticket_num --;
}
pthread_mutex_unlock(&mutex_x);
}
pthread_exit((void*)1);
}
int main()
{
int iRet;
pthread_t tids[4];
for(int i = 0;i < 4;i++)
{
iRet = pthread_create(&tids[i],NULL,&sell_ticket,NULL);
if(iRet)
{
printf("can`t create thread \n");
return 0;
}
}
sleep(20);
void *retval;
for(int i = 0;i<4;i++)
{
iRet = pthread_join(tids[i],NULL);
if(iRet)
{
printf("thread has been detached\n");
return 0;
}
}
printf("...\n");
return 0;
}