
#include <myhead.h>
char buf[]="1234567";
sem_t sem1,sem2;
void* output(void*arg)
{
while(1){
if(sem_wait(&sem1)==0){
printf("%s\n",buf);
sem_post(&sem2);
}
else{
ERR_MSG("sem_wait");
}
}
}
void* turn(void*arg)
{
while(1){
if(sem_wait(&sem2)==0){
for(int i=0;i<strlen(buf)/2;i++){
char t=buf[i];
buf[i]=buf[strlen(buf)-1-i];
buf[strlen(buf)-1-i]=t;
}
sem_post(&sem1);
}
else{
ERR_MSG("sem_wait");
}
}
}
int main(int argc, const char *argv[])
{
if(sem_init(&sem1,0,1)<0){
ERR_MSG("sem_init");
}
if(sem_init(&sem2,0,0)<0){
ERR_MSG("sem_init");
}
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,output,NULL);
pthread_create(&tid2,NULL,turn,NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
sem_destroy(&sem1);
sem_destroy(&sem2);
return 0;
}
#include <myhead.h>
int main(int argc, const char *argv[])
{
key_t key =ftok("./05v.c",1);
if(key<0)
{
ERR_MSG("ftok");
}
int shmid = shmget(key,32,IPC_CREAT|0664);
if(shmid<0){
ERR_MSG("shmid");
}
void *addr = shmat(shmid,NULL,0);
if((void*)-1==addr)
{
ERR_MSG("shmat");
}
int semid = semget(key,2,IPC_CREAT|0664);
if(semid<0){
ERR_MSG("semget");
}
int *flag=(int*)addr;
*flag=0;
char *p2=(char*)(flag+1);
strcpy(p2,"1234567");
unsigned int setval=1;
if(semctl(semid,0,SETVAL,setval)<0)
{
ERR_MSG("semctl");
}
struct sembuf sops;
sops.sem_num =0;
sops.sem_op = -1;
sops.sem_flg = 0;
while(1){
if(semop(semid,&sops,1)<0)
{
ERR_MSG("semop");
}else{
if(0==*flag){
sleep(1);
printf("%s\n",p2);
*flag=1;
}
}
}
return 0;
}