我正在尝试解决以下练习:
机器A每2秒产生一个项目。 AA机组装 机器A生产的2件商品中的商品。
一台AA机器每秒可以组装一个产品,但需要2个 每个产品有2个项目,因此机管局正在等待机器A的2个项目。
每台机器都处于无休止的循环中,但是工厂在20点后关闭 秒,无需等待机器完成工作。
写一个程序,允许工厂和其中的机器, 根据工厂的要求组织工作。
我有以下输出,我的代码需要输出相同的结果。
我这样写:
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <semaphore.h>
sem_t sem1;
void* Machine_A() {
while(1) {
printf("Produced A\n");
sleep(2);
sem_post(&sem1);
}
}
void* Machine_AA() {
while(1) {
sem_wait(&sem1);
sem_wait(&sem1);
printf("Collected AA\n");
sleep(1);
}
}
int main() {
pthread_t threadA, threadAA;
sem_init(&sem1, 0, 0);
pthread_create(&threadA, NULL, Machine_A, NULL);
pthread_create(&threadAA, NULL, Machine_AA, NULL );
sleep(20);
return 0;
}
我得到以下输出:
我不明白为什么机器A第一次打印3次,然后才能正常工作。
如果我更改机器A的代码:
void* Machine_A() {
while(1) {
printf("Produced A\n");
sem_post(&sem1);
sleep(2);
}
}
我得到正确的输出。
我不明白为什么它会打印Produced A
3次。
每次sem_wait
阻塞,直到有可能执行递减操作为止。
谢谢!