抢先避免死锁

时间:2017-04-03 02:54:54

标签: c++ multithreading deadlock

我理解使用抢占来避免死锁的过程,但我很难将其放入代码中。

我对使用主题t1,t2 资源 w,x,y 避免死锁的先发制人的理解是:

thread t2 -> has resources W, Y. request resource X

t1 checks if resource W is free. if it's not free, don't acquire resource X or release it.

t2 executes. Releases resources W, Y, X

t1 executes

background

我应该如何在c ++中实现上面描述的内容?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

一种方法是对资源进行编号(见7.4.4 here):

w = 1
y = 2
x = 3

然后是一个简单的规则:线程只能按递增顺序获取资源。

  

换句话说,为了请求资源Rj,进程必须首先释放所有Ri,使得i> = j。

主题t1 - >资源X(值为3)。请求资源W(值为1)==>它需要首先发布X

主题t2 - >资源W(值为1),Y(值为2)。请求资源X(值为3)==>在t1发布它之后立即获取它