gpt4 book ai didi

c - c中的pthread条件等待

转载 作者:行者123 更新时间:2023-11-30 16:55:46 28 4
gpt4 key购买 nike

除了举一个我想做的事情的例子之外,我不知道如何问这个问题,所以就这样吧。假设我有线程 A、B、C、D、E 和 F。我有一个名为 Car 的共享资源。 汽车能够容纳 2 个人,又名线程。所以现在我将按时间顺序从 A->F 创建线程。但是,一次只有 2 个线程可以使用Car。因此,在时间 1,我们看到线程 A 和 B 正在使用Car。假设线程 B 现在正从汽车上下来,现在我们有一个空位。该位置由线程 C 填充。依此类推,直到每个线程在汽车中都有一个转弯。实现这一目标的最佳方法是什么?所有线程都必须正在运行,并且一次只能有 2 个线程使用共享资源,以免我没有说清楚。我考虑过以某种方式实现线程队列。这样,当一个完成时,它可以向下一个发出信号,但我不知道如何去做。感谢您的任何和所有帮助。

编辑:抱歉,我没有说清楚,只有以下字母才能进入接下来的汽车,因此,例如,如果B从汽车中出来,那么接下来只允许 C 进入汽车。如果 A 下车,而 汽车 包含 {A,C},则应通知 D 进入 汽车,所以现在 汽车 包含 { D,C} 等等,直到所有线程都有机会乘坐汽车

最佳答案

听起来您正在寻找的机制是 semaphore :

A semaphore is an integer whose value is never allowed to fall below
zero. Two operations can be performed on semaphores: increment the
semaphore value by one (sem_post(3)); and decrement the semaphore
value by one (sem_wait(3)). If the value of a semaphore is currently
zero, then a sem_wait(3) operation will block until the value becomes
greater than zero.

将信号量的初始值设置为 2(在 sem_init() 调用中),并让每个线程调用 sem_wait()上车之前,以及 sem_post()下车后,您应该得到您想要的行为。

关于c - c中的pthread条件等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40199394/

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