#include<pthread.h>#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<semaphore.h>sem_t sem;void*runner(void* arg){sem_wait(&sem);//printf("this is son pthread\n");printf("第N号奶茶开始制作,预计等待时间5秒\n");sleep(5);// sem_wait(&sem); //等待信号pthread_exit(0);}intmain(){int res=-1;
res =sem_init(&sem,0,0);//初始化 使初值为0if(res ==-1){printf("semaphore iniitialzation failed\n");exit(EXIT_FAILURE);}pthread_t tid;//创建线程//sem_wait(&sem);
res =pthread_create(&tid,NULL,runner,NULL);//0为创建成功if(res!=0){printf("pthread_create failed\n");exit(EXIT_FAILURE);}//printf("this is father pthread \n");sem_post(&sem);//释放信号两 子线程开始执行//printf("back to father thread");
res =pthread_join(tid,NULL);//释放信号两printf("第N号奶茶可以取货!\n");sem_destroy(&sem);return0;}