#include <myhead.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int flag = 0;
void* callback1()
{
while(1){
pthread_mutex_lock(&mutex);
if(flag != 0){
pthread_cond_wait(&cond,&mutex);
}
flag = 1;
printf("A\n");
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void* callback2()
{
while(1){
pthread_mutex_lock(&mutex);
if(flag != 1){
pthread_cond_wait(&cond,&mutex);
}
printf("B\n");
flag = 2;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void* callback3()
{
while(1){
pthread_mutex_lock(&mutex);
if(flag != 2){
pthread_cond_wait(&cond,&mutex);
}
printf("C\n");
flag = 1;
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_cteate");
return -1;
}
if(pthread_create(&tid2,NULL,callback2,(void*)&mutex) != 0){
printf("pthread_cteate");
return -1;
}
if(pthread_create(&tid3,NULL,callback3,(void*)&mutex) != 0){
printf("pthread_cteate");
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 <myhead.h>
int main(int argc, const char *argv[])
{
int pfd1[2];
if(pipe(pfd1)<0){
perror("pipe");
return -1;
}
printf("pipe1 ok __%d__\n",__LINE__);
int pfd2[2];
if(pipe(pfd2)<0){
perror("pipe");
return -1;
}
printf("pipe2 ok __%d__\n",__LINE__);
pid_t pid = fork();
if(pid > 0){
char buf[128];
while(1){
scanf("%s",buf);
if(write(pfd1[1],buf,sizeof(buf)) < 0){
perror("write");
return -1;
}
printf("写入成功 __%d__\n",__LINE__);
if(read(pfd2[0],buf,sizeof(buf)) < 0){
perror("read");
return -1;
}
printf("读取子ok buf=%s %d\n",buf,__LINE__);
if(strcmp(buf,"quit")==0)
break;
}
wait(NULL);
}
else if(pid == 0){
char buf[128] = "";
ssize_t res;
while(1){
res = read(pfd1[0],buf,sizeof(buf));
if(res < 0){
perror("read");
return -1;
}
printf("读取OK res=%ld buf=%s __%d__\n",res,buf,__LINE__);
if(write(pfd2[1],buf,sizeof(buf)) < 0){
perror("write");
return -1;
}
printf("写入子ok buf=%s %d\n",buf,__LINE__);
if(strcmp(buf,"quit")==0)
break;
}
wait(NULL);
}
else{
perror("fork");
return -1;
}
}