gpt4 book ai didi

只有一个信号量的生产者-消费者的 C 解决方案

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:25 24 4
gpt4 key购买 nike

以下代码解决了(我认为)两个线程仅使用一个信号量的生产者-消费者问题。

sem_t sem; //init to 1
int arr[100];

void producer()
{
while(;;) {
sem_wait(sem)
if it is fully filled {
sem_post(sem);
} else {
run 100 times and fill the items

sem_post(sem);
}
sleep(2);
}
}

void consumer()
{
while(;;) {
sem_wait(sem)
if it is empty {
sem_post(sem);
} else {
run 100 times and read the items
reset the start index to 0 so producer could fill again
sem_post(sem);
}
sleep(2);
}
}

int main()
{
//create thread 1 calling consumer
//create thread 2 calling producer
}

问题是为什么要使用两个信号量(空的和满的)?一个信号量不能解决问题吗?

最佳答案

您需要两个信号量的原因是,当“容器”或生产者和消费者共享的任何内容已满时,生产者无法执行任何操作,但当容器为空时,消费者也无法执行任何操作。

因此,生产者需要有一个信号量表示满,消费者需要一个信号量表示空。

关于只有一个信号量的生产者-消费者的 C 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30627851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com