L******r 发帖数: 33 | 1 Find, correct and explain the defect in the following code snippet.
Mutex mA;
Mutex mB;
Take(mA);
Take(mB);
DoSomething();
Release(mA);
Release(mB); |
l*********s 发帖数: 5409 | 2 B shall be released first.But A, B are redundant anyway. |
e****d 发帖数: 895 | 3 If DoSomething() can throw exceptions ...
【在 L******r 的大作中提到】 : Find, correct and explain the defect in the following code snippet. : Mutex mA; : Mutex mB; : Take(mA); : Take(mB); : DoSomething(); : Release(mA); : Release(mB);
|
L******r 发帖数: 33 | 4 1. 好像有人也说要先ReleaseB,好处是什么?
2. DoSomething(), throw error, 那我能做的就是在Catch中ReleaseA and B,好像
和这道题的本意不符? |
g**w 发帖数: 969 | 5 先release B,是假设take A 和take B之间不是空白的。
【在 L******r 的大作中提到】 : 1. 好像有人也说要先ReleaseB,好处是什么? : 2. DoSomething(), throw error, 那我能做的就是在Catch中ReleaseA and B,好像 : 和这道题的本意不符?
|
c*****t 发帖数: 1879 | 6 The reason is to avoid deadlock as in dining philosophers problem.
【在 L******r 的大作中提到】 : 1. 好像有人也说要先ReleaseB,好处是什么? : 2. DoSomething(), throw error, 那我能做的就是在Catch中ReleaseA and B,好像 : 和这道题的本意不符?
|
s**********o 发帖数: 197 | 7 感觉程序没什么错。不过一般来说系统对take顺序是有要求的,比如说只能A B C D这
样来,同时对release也要求反过来,这样也许设计系统的时候会降低些复杂度.
但release顺序我觉得理论上应该不重要 |