//線程分離
#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;
}
利用互斥鎖加上信號量Linux c 輪流打印ABC
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.