#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <semaphore.h>
sem_t sem1;
sem_t sem2;
char buf[]="000000|111111";
void *fz(void*arg)
{
int len=strlen(buf);
char temp=0;
while(1)
{
if(sem_wait(&sem2)<0)
{
perror("sem_wait");
}
for(int i=0,j=len-1;i<j;i++,j--)
{
temp=buf[i];
buf[i]=buf[j];
buf[j]=temp;
}
if(sem_post(&sem1)<0)
{
perror("sem_post");
}
}
pthread_exit(NULL);
}
void *dy(void*arg)
{
while(1)
{
if(sem_wait(&sem1)<0)
{
perror("sem_wait");
}
printf("%s\n",buf);
if(sem_post(&sem2)<0)
{
perror("sem_post");
}
}
pthread_exit(NULL);
}
int main( int argc, const char *argv[])
{
if(sem_init(&sem1,0,1)<0)
{
perror("sem_init");
return -1;
}
if(sem_init(&sem2,0,0)<0)
{
perror("sem_init");
return -1;
}
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,fz,NULL);
pthread_create(&tid2,NULL,dy,NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
sem_destroy(&sem1);
sem_destroy(&sem2);
return 0;
}