内容纲要

总算完成了操作系统大作业,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