[英]critical section prob while loop
好的,我正在閱讀加爾文第六版的關鍵部分問題。 事實是,問題中使用的算法有一個while循環:
do
{
while(turn!=i);
critical section
turn=j;
remainder section
}while(1);
最初轉= = 0,對於i = 0,進程p0運行其關鍵問題。 while(turn!=i);
評估此特定情況的while(false)
。
現在我的問題是,如果while循環計算為false,那么如何評估以下關鍵部分。 這是愚蠢的部分,如果出於任何原因,那么(轉!= i); 有一個分號,然后以下語句沒有while循環的影響! 那么,在這里使用while循環是什么意思!? :|
在這種情況下,while循環將無限循環,或者什么都不做。 帶有半colomn的while循環指定它應該嘗試循環,但是沒有在while塊中執行指令。 寫作while (1);
相當於while (1) {}
這種語法的一個常見用法是當你想要迭代時,比如說,直到字符串的結尾,進一步的工作。 你會寫類似的東西
char *work_on_end_of_string(char *str) {
int i = 0;
while (str[i++]);
// now str[i] is pointing on the end of the string
}
在你的情況下,正如你提到你的程序是多線程的, turn
或者i
似乎需要在執行關鍵部分之前有所不同。 while語句允許循環測試這個條件,直到一個線程修改其中一個來滿足它。
如果while循環中的條件為false,那么進程P0的臨界區將執行,如果條件為真,則while循環迭代(認為它是進程P0進入休眠狀態),直到另一個循環的值被另一個改變為止。正在運行其關鍵部分的流程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.