#include <code.h>
int flag = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void *callBack1(void * arg){
while(1)
{
sleep(1);
pthread_mutex_lock(&mutex);
while(0 != flag ){
pthread_cond_wait(&cond,&mutex);
if(2==flag)
pthread_cond_signal(&cond);
}
printf("A\t");
flag = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void *callBack2(void * arg){
while(1)
{
pthread_mutex_lock(&mutex);
while(1 != flag ){
pthread_cond_wait(&cond,&mutex);
if(0==flag)
pthread_cond_signal(&cond);
}
printf("B\t");
flag = 2;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void *callBack3(void * arg){
while(1)
{
pthread_mutex_lock(&mutex);
while(2 != flag ){
pthread_cond_wait(&cond,&mutex);
if(1==flag)
pthread_cond_signal(&cond);
}
printf("C\n");
flag = 0;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
pthread_t tid1,tid2,tid3;
if(pthread_create(&tid1,NULL,callBack1,(void *)&mutex)!=0){
printf("pthread_create");
return -1;
}
if(pthread_create(&tid2,NULL,callBack2,(void *)&mutex)!=0){
printf("pthread_create");
return -1;
}
if(pthread_create(&tid3,NULL,callBack3,(void *)&mutex)!=0){
printf("pthread_create");
return -1;
}
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
运行结果
#include <code.h>
int main(int argc, const char *argv[])
{
int pdf[2],pdf2[2];
if(pipe(pdf)<0||pipe(pdf2)<0)
{
perror("pipe");
return -1;
}
printf("create pipe success pdf[0] = %d pdf[1] = %d\n",pdf[0],pdf[1]);
printf("create pipe success pdf[0] = %d pdf[1] = %d\n",pdf[0],pdf[1]);
pid_t pid = fork();
if(pid > 0)
{
char buf[128];
ssize_t res;
while(1){
bzero(buf,sizeof(buf));
scanf("%s",buf);
getchar();
if(write(pdf[1],buf,sizeof(buf))<0){
perror("write");
return -1;
}
if(strcmp(buf,"quit")==0){
printf("父进程退出\n");
break;
}
printf("父进程写入成功 __%d__\n",__LINE__);
res = read(pdf2[0],buf,sizeof(buf));
if(res<0){
perror("read");
return -1;
}
printf("父进程收到的res = %ld buf = %s __%d__\n",res,buf,__LINE__);
}
wait(NULL);
}
else if(0 == pid)
{
char buf[128] = "";
ssize_t res;
while(1)
{
bzero(buf,sizeof(buf));
scanf("%s",buf);
getchar();
if(write(pdf2[1],buf,sizeof(buf))<0){
perror("write");
return -1;
}
if(strcmp(buf,"quit")==0){
printf("子进程退出\n");
break;
}
printf("子进程写入成功 __%d__\n",__LINE__);
res = read(pdf[0],buf,sizeof(buf));
if(res<0){
perror("read");
return -1;
}
printf("子进程收到的res = %ld buf = %s __%d__\n",res,buf,__LINE__);
}
}
else
{
perror("fork");
return -1;
}
close(pdf[0]);
close(pdf[1]);
return 0;
}
运行结果