gpt4 book ai didi

c++ - 使用信号量并调用 wait() 和 signal()

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:45 31 4
gpt4 key购买 nike

问题来了。厕所一次可以供男性或女性使用。如果男性或女性在给定时间在洗手间,异性不能进入洗手间,必须等待。一旦所有的雌性都出来了,雄性就可以进入了。所以,这是我的解决方案:

我想使用信号量和互斥量在线程之间执行同步。我仍然不清楚如何实现它。这是我的想法:

  • 创建一个互斥锁来锁定/解锁线程。(锁定洗手间)
  • 创建一个信号量来计算洗手间的人数。每个性别一个
  • 信号量 male_in_restroom;
  • 信号量 female_in_restroom;
  • 排队等待男性,
  • 排队等待女性,

所以首先,我检查进程的性别是什么,然后我检查异性的信号量是否大于 1。如果不是,我让他们进入洗手间。但是如果洗手间里已经有异性成员,我需要让这个过程等待并让它休眠。

我怎样才能让这个进程进入休眠状态?我找了一些例子,但仍然不确定该怎么做。

wait()signal() 的函数签名示例会很有帮助。

最佳答案

"create a semaphore for counting the number of people in restroom. one for each sex semaphore male_in_restroom; semaphore female_in_restroom; Queue for waiting male, Queue for waiting female,"

其实没什么意思。信号量值的目的是指示资源是否可用。 如果值为零,则资源不可用。如果大于零,则资源可用。因此,如果您以某种方式设法通过使用资源增加 sem 计数,信号量有什么用途?

So at first, I check what sex is the process and then I check if the semphore for the opposing sex is greater than one. If not I let them enter the restroom.

不不不!你有它低音尴尬。这强调了一点:信号量不是用来存储任意值的。

您的各种计数等是普通变量,不是信号量,但是,您必须使用互斥量/信号量/条件变量(最有可能:互斥量+条件变量)以控制对它们的访问.

另外,我不知道为什么您认为跟踪有多少人在等待是有用的或重要的。

关于c++ - 使用信号量并调用 wait() 和 signal(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474429/

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