0
do { while (test_and_set(&lock))
; /* do nothing */
/* critical section */
lock = false;
/* remainder section */
} while (true);



boolean test_and_set (boolean *target)
{
boolean rv = *target;
*target = TRUE;
return rv:
}

while (test_and_set(&lock) が返すものに関係なく、それが true であるか false であるかに関係なく、do{} コードは引き続きクリティカル セクションを実行するため、それがどのように機能するのかわかりません。何もせず、すぐに実行されます。クリティカル セクションはスレッドの同期にどのように役立つのでしょうか?

4

1 に答える 1