爲了出示擔保界等待的測試和設置指令,下面是操作系統的書,高爾文給出的代碼 - :界等待測試和設置指令
do {
1 waiting[i] = true;
2 while (waiting[i] && test_and_set(&lock)) ;
3 waiting[i] = false;
/* critical section */
4 j = (i + 1) % n;
5 while ((j != i) && !waiting[j])
6 j = (j + 1) % n;
7 if (j == i)
8 lock = false;
9 else
10 waiting[j] = false;
/* remainder section */
} while (true);
我得到的完整代碼,並得出結論該
的方法P_I將是在臨界段如果任 等待[I] =假或test_and_set(&鎖)= FALSE,其確保鎖定是FALSE先前。因此退出部分要麼正在等待[j],要麼鎖定爲FALSE。
但我已經得到了一些doubts-:
如果出口段段發現同樣的過程再次關鍵部分請求即
if j==i
然後根據代碼,該過程必須從行號2開始執行,即將執行
test_and_set(&lock))
在同時
循環,找到test_and_set(&鎖))爲假,然後移動到關鍵section.My疑問的返回值是,如果同樣的過程要在關鍵的部分,是有必要啓動其exection直接從2號線
2.Now我想要做如下的置換,並要檢查的可能outcome.i要交換行號8和10
的行數8,如果我做
waiting[j]=false;
然後它也會移動到臨界區,即使現在lock = true。
- 的行數10,如果我做
鎖=假
那麼也它(過程p_j)將移動到臨界區,即使等待
[i] =真,我認爲這將是更好因爲行號3將在while循環由於test_and_set(&鎖定)= false而中斷之後分配waiting [i] = false。 在另一方面,如果我有這樣的變化過程必須執行test_and_set(&鎖)這是費時
是我點2的假設嗎?
點1的正確原因是什麼?
感謝
此代碼無意義。必須有其他部分。 – user3344003
@ user3344003你能否提一下行號? – sourav
@ user3344003檢查此問題http://stackoverflow.com/questions/31084724/bounded-waiting-mutual-exclusion-with-test-and-set – sourav