内容纲要
总算完成了操作系统大作业,y1s1,PV还挺好玩的
记录一下使用方法8
//司机-售票员PV实现
#include <stdio.h>
#include <semaphore.h>
#include <pthread.h>
#include <unistd.h>
sem_t mutex1;
sem_t mutex2;
sem_t stop;
sem_t start;
void seller(){
while(1){
sem_wait(&stop);
sem_wait(&mutex1);
printf("open the door......\n");
printf("guests......\n");
printf("close the door......\n");
printf("selling......\n");
sem_post(&mutex1);
sem_post(&start);
}
}
void driver(){
while(1){
sem_wait(&start);
sem_wait(&mutex2);
printf("the bus is moving......\n");
printf("the bus is stop......\n");
sem_post(&mutex2);
sem_post(&stop);
}
}
int main(){
sem_init(&mutex1,0,1);
sem_init(&mutex2,0,1);
sem_init(&start,0,1);
sem_init(&stop,0,1);
pthread_t tid1,tid2;
while(1){
pthread_create(&tid1,NULL,seller,NULL);
pthread_create(&tid2,NULL,driver,NULL);
}
return 0;
}
//linux下写的(因为windows能实现的库我没找到)
//<semaphore.h>可以使用:
sem_t x; //定义变量
sem_init(&x,m,n); //初始化变量
//我的理解是x=1,就要写成sem_init(&x,0,1),“&”不能丢
sem_wait(&x); //相当于P操作
sem_post(&x); //相当于V操作
pthread_create(&tid,NULL,myFunction,NULL); //加入进程
//然后就可以愉快的跑起来的
不过这段代码还是有点问题的,运行下来,如果停车不开门会继续启动……就当到站没人所以不开门8 orz