1. 程式人生 > >多線程同步

多線程同步

read clu num eat init [0 null _exit exit

概念:多個線程按照規定的順序來執行,即為線程同步

掃地5次後拖地模型

#include<pthread.h>
#include<stdio.h>

pthread_mutex_t mut;
pthread_t thread[2];
int number=0;

void studentA()
{
int i;

for(i=0;i<5;i++)
{
//掃地1次
pthread_mutex_lock(&mut); //使用前保護起來
number++;
if(number>=5)
printf("studentA has finished his work\n");

//休息1秒
pthread_mutex_unlock(&mut); //使用後解開
sleep(1);

}

//掃地5次,退出
pthread_exit(NULL);
}


void studentB()
{

while(1)

{
//判斷A是否掃地5次了
pthread_mutex_lock(&mut); //使用前保護起來

if(number>=5)
{
//拖地
number=0;
pthread_mutex_unlock(&mut); //使用後解開
printf("studentB has finished his work\n");
break;
}

else
{
//睡2秒
sleep(2);
}
}
//退出
pthread_exit(NULL);
}

int main()
{
//初始化互斥鎖
pthread_mutex_init(&mut,NULL);

//創建A同學線程程
pthread_create(&thread[0], NULL,studentA,NULL);

//創建B同學線程
pthread_create(&thread[1], NULL,studentB,NULL);

//等待A同學線程程結束
pthread_join( thread[0], NULL);

//等待B同學線程程結束
pthread_join( thread[1], NULL);

}

多線程同步