gpt4 book ai didi

c++ - 等待多线程(Posix 线程,c++)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:19 25 4
gpt4 key购买 nike

考虑以下情况:

我有一个被多个线程使用的对象 foo,它可能会也可能不会重复调用 foo 上的方法 bar()。

bar() 被并行执行多次是完全没问题的(也是理想的),因为它永远不会改变 foo 的状态。

当我需要从外部(从另一个线程,而不是从“工作”线程之一)更改 foo 的状态时,问题就出现了——我如何以某种方式锁定 foo,以便调用线程阻塞直到最后一个工作线程是用 bar() 完成的,所有工作线程都将在 bar() 处阻塞,直到我再次释放 foo?

很明显,我不能只使用在执行 bar() 期间保持锁定的互斥量,因为那样我就没有并发性了。

有什么想法吗?或者对于这些类型的问题是否有更好的设计?

最佳答案

我不确定您将如何实现,worker 都没有使用 foo 让 writer 更新它,但如果这不是问题,那么只需使用 read/write mutex (workers 获取读锁,writer 获取写锁)。

值得一提的是,您可能需要考虑让 foo 写时复制。这样您将使同步开销接近于零。您可以使用 shared_ptr atomically实现这一目标。

关于c++ - 等待多线程(Posix 线程,c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14234344/

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