gpt4 book ai didi

multithreading - 资源池死锁

转载 作者:行者123 更新时间:2023-12-03 13:05:13 24 4
gpt4 key购买 nike

在多个线程中同时运行的伪代码会导致死锁:

Resource res1 = pool.get();
...
Resource res2 = pool.get();
...
pool.release(res2);
pool.release(res1);

这是预期的行为吗? (我想是)

如果池的大小是线程数的两倍,似乎不会发生死锁-这条语句正确吗?

对于计算机科学中的这种僵局,是否有一个“科学的”名称?将不胜感激一些链接。

谢谢

最佳答案

假设您有两个线程和两个资源。

线程A执行res1 = pool.get()并获取一个资源。线程B执行res1 = pool.get()并获取一个资源。现在,池已耗尽,因此任何线程都无法完成res2 = pool.get()

如果您有一个备用资源(即n+1线程至少为n资源),问题就消失了,因为在那种情况下,保证一个线程获得两个资源,完成并释放足够的资源供其他线程使用。增加资源数量可提高并行度;由于资源是线程的两倍,因此每个线程都可以无阻塞地获取资源,因此所有线程都可以并行执行。

AFAIK这就是所谓的“死锁”,因为它本质上是现象的教科书示例。现在,这两个任务都在互相等待以释放必要的资源。

关于multithreading - 资源池死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995276/

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