首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >资源池死锁

资源池死锁
EN

Stack Overflow用户
提问于 2012-10-21 13:30:00
回答 1查看 104关注 0票数 2

此伪代码在多个线程中并发运行会导致死锁:

代码语言:javascript
复制
Resource res1 = pool.get();
...
Resource res2 = pool.get();
...
pool.release(res2);
pool.release(res1);

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

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

在计算机科学中,这种死锁有一个“科学”的名称吗?会喜欢一些链接的。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-21 13:35:41

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

线程A执行res1 = pool.get()并获取一个资源。线程B执行res1 = pool.get()并获取一个资源。现在池耗尽了,所以两个线程都不能完成res2 = pool.get()

如果您有一个空闲资源(即至少n线程的n+1资源),问题就会消失,因为在这种情况下,一个线程肯定会获得两个资源,完成,从而释放足够的资源供其他线程使用。增加资源的数量可以提高并行性;当资源是线程的两倍时,每个线程都可以在没有阻塞的情况下获得资源,因此所有线程都可以并行执行。

AFAIK这被简单地称为“死锁”,因为它本质上是一个教科书上的现象的例子。这两个任务现在都在等待对方释放必要的资源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12995276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档