利用互斥鎖加上信號量Linux c 輪流打印ABC


//線程分離

#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define DEBUG 1

pthread_mutex_t mylock=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t ready=PTHREAD_COND_INITIALIZER;
int num=0;

void *thread_fun1(void *arc){

	int param = (int )arc;

	for(int i=0;i<10;i++){
	
		pthread_mutex_lock(&mylock);

		//如果輸入的線程和共享num 不相等則進行三個操作
		//釋互斥鎖
		//等待在條件變量上,另外一個線程拿起比較若想等則執行並且修改num
		//再次拿起每次只有一個人拿起
		while(param!=num){
			pthread_cond_wait(&ready,&mylock);
		}
		
		printf("%c\n",param+'A');
		num = (num +1)%3;
		pthread_mutex_unlock(&mylock);
		pthread_cond_broadcast(&ready);
	}
	pthread_exit((void *)0);
}


 int main(int argc, char const *argv[])
{
	
	pthread_t tid[3];
	
	for(int i=0;i<3;i++){
		pthread_create(&tid[i],NULL,thread_fun1,(void *)i);
	}
	for(int i=0;i<3;i++){
		pthread_join(tid[i],NULL);
	}
	

	//sleep(10);
	return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章