//线程分离
#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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.