gpt4 book ai didi

performance - 高效的独立同步块(synchronized block)?

转载 作者:行者123 更新时间:2023-12-04 02:37:59 25 4
gpt4 key购买 nike

我有一个场景,在我的程序中的某些点,一个线程需要更新几个共享数据结构。每个数据结构都可以安全地与任何其他数据结构并行更新,但每个数据结构一次只能由一个线程更新。我在代码中表达这一点的简单、天真的方式是:

synchronized updateStructure1();
synchronized updateStructure2();
// ...

这似乎效率低下,因为如果多个线程尝试更新结构 1,但没有线程尝试更新结构 2,它们都会阻塞等待保护结构 1 的锁,而结构 2 的锁则未被占用。

有没有一种“标准”的方法来解决这个问题?换句话说,是否有一个标准的线程原语尝试以循环方式更新所有结构,仅当所有锁都被占用时才阻塞,并在所有结构更新时返回?

这是一个与语言无关的问题,但如果有帮助,我使用的语言是 D。

最佳答案

如果您的语言支持轻量级线程或Actors ,您总是可以让更新线程产生一个新线程来更改每个对象,其中每个线程只是锁定、修改和解锁每个对象。然后在返回之前让您的更新线程加入其所有子线程。这将问题放到了运行时的调度上,并且可以随意调度这些子线程以获得最佳性能。

您可以在具有较重线程的语言中执行此操作,但是 spawn 和 join 可能会有太多开销(尽管线程池可能会减轻其中的一些)。

关于performance - 高效的独立同步块(synchronized block)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3230645/

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