#include <stdio.h> #include <pthread.h> #include <semaphore.h>

#define N 10 //箱子的容量

sem_t empty; //箱子内的空位 sem_t wheel; //车轮 sem_t frame; //车架 sem_t s1; //车架最大值 sem_t s2; //车轮最大值

void *worker1(void *arg) { while (1) { //加工一个车架 printf("Worker 1 is producing a frame.\n"); //检测是否还有空位置 sem_wait(&empty); //检测车架是否还有空位 sem_wait(&s1); //车架放入箱中 printf("Worker 1 puts a frame into the box.\n"); sem_post(&frame); //车架数量+1 } }

void *worker2(void *arg) { while (1) { //加工一个车轮 printf("Worker 2 is producing a wheel.\n"); //检测是否还有空位 sem_wait(&empty); //检测车轮是否还有空位 sem_wait(&s2); //车轮放入箱中 printf("Worker 2 puts a wheel into the box.\n"); sem_post(&wheel); //车轮数+1 } }

void *worker3(void *arg) { while (1) { //检测是否有车架 sem_wait(&frame); //箱中取一个车架 printf("Worker 3 takes a frame from the box.\n"); //空位+1 sem_post(&empty); //车架空位+1 sem_post(&s1); //检测是否有两个车轮 sem_wait(&wheel); sem_wait(&wheel); //箱中取两个车轮 printf("Worker 3 takes two wheels from the box.\n"); //空位+2 sem_post(&empty); sem_post(&empty); //车轮空位+2 sem_post(&s2); sem_post(&s2); //组装为一辆车 printf("Worker 3 assembles a car.\n"); } }

int main() { //初始化信号量 sem_init(&empty, 0, N); sem_init(&wheel, 0, 0); sem_init(&frame, 0, 0); sem_init(&s1, 0, N-2); sem_init(&s2, 0, N-1);

//创建线程
pthread_t tid1, tid2, tid3;
pthread_create(&tid1, NULL, worker1, NULL);
pthread_create(&tid2, NULL, worker2, NULL);
pthread_create(&tid3, NULL, worker3, NULL);

//等待线程结束
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
pthread_join(tid3, NULL);

//销毁信号量
sem_destroy(&empty);
sem_destroy(&wheel);
sem_destroy(&frame);
sem_destroy(&s1);
sem_destroy(&s2);

return 0;
根据下面伪代码写出c语言程序semaphore empty=N;箱子内的空位semaphore weel=0;车轮semaphore frame=0;车架semaphore s1=N-2;车架最大值semaphore s2=N-1;车轮最大值工人1活动:do	加工一个车架;	Pempty;检测是否还有空位置	Ps1;检测车架是否还有空位	车架放入箱中;	Vframe;车架数量+1while1工人2

原文地址: https://www.cveoy.top/t/topic/facX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录