此伪代码在多个线程中并发运行会导致死锁:
Resource res1 = pool.get();
...
Resource res2 = pool.get();
...
pool.release(res2);
pool.release(res1);这是一种预期的行为吗?(我想是的)
如果池的大小是线程数的两倍,死锁似乎不会发生--这句话正确吗?
在计算机科学中,这种死锁有一个“科学”的名称吗?会喜欢一些链接的。
谢谢
发布于 2012-10-21 13:35:41
假设你有两个线程和两个资源。
线程A执行res1 = pool.get()并获取一个资源。线程B执行res1 = pool.get()并获取一个资源。现在池耗尽了,所以两个线程都不能完成res2 = pool.get()。
如果您有一个空闲资源(即至少n线程的n+1资源),问题就会消失,因为在这种情况下,一个线程肯定会获得两个资源,完成,从而释放足够的资源供其他线程使用。增加资源的数量可以提高并行性;当资源是线程的两倍时,每个线程都可以在没有阻塞的情况下获得资源,因此所有线程都可以并行执行。
AFAIK这被简单地称为“死锁”,因为它本质上是一个教科书上的现象的例子。这两个任务现在都在等待对方释放必要的资源。
https://stackoverflow.com/questions/12995276
复制相似问题