控制允许动态运行c++的并发操作数

control number of concurrent actions allowed to run dynamically c c++

本文关键字:c++ 运行 并发 操作数 动态 许动态 控制      更新时间:2023-10-16

需要找到一种方法来控制可以进入关键部分的操作数量。用户可以在运行时更新操作的数量。e、 g如果有1000个操作,用户可以选择一次运行1个操作,因此它将是连续的(例如使用互斥(,每个1000个操作都需要首先获取互斥。另一种情况是允许一次运行500个动作(例如,使用初始值为500的信号量(。问题是有一种方法可以在运行时控制这个值N(1或500(个操作(信号量没有帮助,因为它不能修改初始值,也不知道有多少操作可以进入(

有2个实体

  • 当前正在运行的作业数
  • 允许运行的最大作业数

您可以将两个变量设为std::atomic_int,以允许从多个线程进行修改。

接下来使用与std::mutex耦合的std::condition_variable

伪代码的思想是

wait on condition variable while num_jobs_running >= num_allowed
++num_jobs_running
release the mutex
do the job
--num_jobs_running
notify condition variable