我理解使用抢占来避免死锁的过程,但我很难将其放入代码中。
我对使用主题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 ++中实现上面描述的内容?任何帮助表示赞赏。
答案 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
发布它之后立即获取它