#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<string.h>
#include <semaphore.h>
char buf[]="1234567";
int flag=0;
void*fun1(void*my_sem)
{
while(1)
{
sem_wait((sem_t*)my_sem);
if(flag==0)
{
printf("线程1=%s\n",(char*)buf);
flag=1;
}
if(sem_post((sem_t*)my_sem)==-1)
{
perror("sem_post");
return NULL;
}
}
}
void *fun2(void*my_sem)
{
int len=strlen(buf)-1;
while(1)
{
sem_wait((sem_t*)my_sem);
if(flag==1)
{
for(int j=0;j<len/2;j++)
{
char temp;
temp=((char*) buf)[j];
((char*) buf)[j]=((char*)buf)[len-j];
((char*)buf)[len-j]=temp;
}
flag=0;
}
if(sem_post((sem_t*)my_sem)==-1)
{
perror("sem_post");
return NULL;
}
}
}
int main(int argc, const char *argv[])
{
sem_t my_sem;
if(sem_init(&my_sem,0,2)==-1)
{
perror("sem_init");
return -1;
}
pthread_t pth_A;
pthread_t pth_B;
pthread_create(&pth_A,NULL,fun1,(void*)&my_sem);
pthread_create(&pth_A,NULL,fun2,(void*)&my_sem);
pthread_join(pth_A,NULL);
pthread_join(pth_B,NULL);
sem_destroy(&my_sem);
return 0;
}
运行结果