繁体   English   中英

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

[英]control number of concurrent actions allowed to run dynamically c c++

需要找到一种方法来控制可以进入临界区的操作数量。 用户可以在运行时更新操作的数量。 例如,如果有 1000 个动作,用户可以选择一次运行 1 个动作,因此它将是连续的(例如使用互斥锁),每个 1000 个动作需要先获取互斥锁。 另一种情况是允许一次运行 500 个动作(例如,使用初始值为 500 的信号量)。 问题是有没有办法在运行时控制这个值 N(1 或 500)个动作(信号量无济于事,因为无法修改初始值并且不知道准备输入多少动作)

这里有2个实体

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

您可以创建两个变量std::atomic_int以允许来自多个线程的修改。

接下来使用std::condition_variable加上std::mutex

伪代码思想是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM