gpt4 book ai didi

C++ 持有多个线程

转载 作者:可可西里 更新时间:2023-11-01 14:18:46 29 4
gpt4 key购买 nike

我是 C++(在 Windows 上)和线程的新手,目前我正在尝试使用互斥锁、信号量和事件找到解决我的问题的方法。我正在尝试使用构造函数和名为 Enter 的方法创建 Barrier 类。具有唯一方法 Enter 的 Barrier 类应该阻止任何进入它的线程,直到许多线程到达该方法。构造函数接收到的等待它的线程数。我的问题是如何使用锁来产生这种效果?我需要的是类似于反向信号量的东西,它保持线程直到达到计数,而不像常规信号量那样让线程进入直到达到计数。关于如何解决这个问题的任何想法都会很棒。谢谢,内坦内尔。

最佳答案

也许:

在构造函数中,存储限制计数并创建一个空信号量。

当一个线程调用 Enter 时,首先锁定一个互斥锁,这样您就可以安全地在里面玩了。将线程计数计入限制计数。如果尚未达到限制,则释放互斥量并等待信号量。如果达到限制,则在循环中向信号量 [limit-1] 发出信号,将线程计数归零(为下一次做好准备),释放互斥锁并从 Enter() 返回。任何等待信号量且现在准备就绪/正在运行的线程都应该从它们的“Enter”调用中返回。

互斥锁会阻止任何循环的已释放线程“再次进入”,直到所有调用“Enter”并等待的线程都已设置为运行并且屏障已重置。

关于C++ 持有多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18238747/

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