看板 Grad-ProbAsk 關於我們 聯絡資訊
我想要先釐清一個觀念 就是 TestAndSet 只是一個atomic instrucition 而我們利用這個atomic instruction來完成 synchronization ※ 引述《liataian (柴油)》之銘言: : 板友好 : 想教一下Synchronization那章的Test-and-Set指令 : 以下是恐龍上的Test-and-Set指令 : do{ : waiting[i] = True; : key = True; *** : while ( waiting[i] && key ) *** spin lock : key = TestAndSet(&lock); *** 只有第一個執行這個指令者可以拿到 key 為 false 進而脫離 while : waiting[i] = False; : C.S. : j = ( i+1 ) % n; : while ( j != i && !waiting[j] ) : j = ( j+1 ) % n; : if ( j = = i ) : lock = False; *** 繞了一圈發現沒有人想進入 C.S , lock 設成false, 想用的人到時候再去搶 : else : waiting[j] = False; : R.S : }while(true); : 以上打***的有點看不太懂它是怎麼跑的.. : 或是說那幾行是在說明什麼事情呀@@? p.s. atomic instruction : 在執行期間不會被中斷的instruction -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.172.234.36
liataian:謝謝!不過可能我表達不清楚@@ 我是想問說一開始key=true 09/04 01:05
liataian:代表什麼意思呀? lock又是什麼? 為什麼經由TestAndSet() 09/04 01:06
liataian:後 key就變成false了@@? key變成false才能進入C.S是什麼 09/04 01:08
liataian:意思? 這邊我想好久還是沒有頭緒 不好意思>< 09/04 01:09
jackbll:waiting[i]和key都是 true的時候是不是會一直進行TestAndS 09/04 01:21
jackbll:et的迴圈?test的那個函式裡面的lock是false取得false才能 09/04 01:22
jackbll:跳出迴圈 但是key的true會轉換給lock下一個行程進來TestAn 09/04 01:23
jackbll:dSet的時候 就換不到false會卡在迴圈.... 09/04 01:24
cola1230:原PO你指的testset()他功能就是 return i; i=false 09/04 01:39
cola1230:所以初值true 傳回去後 之後拿到都是false 09/04 01:39
cola1230:冏 true false說反 09/04 01:42
alwayswish:亂取是指? 09/04 01:48
christianSK:建議你先看TestAndSet() 做了什麼 09/04 13:21
※ 編輯: christianSK 來自: 218.172.237.153 (09/04 13:21)
christianSK:cola說他亂取是打錯的 我幫他修掉 09/04 13:22
christianSK:另外spin lock是指藉由loop卡住尚未獲得進入權者 09/04 13:22
liataian:克莉絲汀大 我今天弄懂了 感謝你^^ 09/04 19:54
sneak: 冏 true fals https://daxiv.com 09/11 14:30