→ bluesoul: 第二段code迴圈的部分沒有保護 06/29 12:06
有,迴圈上有comment,有說hope junior remembers to use the semaphore
→ sarafciel: 他那段話不是在否定use the same of semaphore這件事 06/29 13:20
→ sarafciel: 簡單的講就是 你不知道用你的code的人是雷包還是大師 06/29 13:23
→ sarafciel: 那麼讓他們去寫semaphore 你也不知道他們寫得對不對 06/29 13:26
→ sarafciel: 還不如你自己實作正確的同步函式給他們call比較好 06/29 13:26
→ sarafciel: 講同步不太精確....應該說可平行化 06/29 13:28
其實我認為這段不是在表達這個意思。GetSemaphore與GiveSemaphore都是廠商提供的fun-
ction,作者是站在"function的使用者"的角度去表達這段話
※ 編輯: zzss2003 (60.251.49.183), 06/29/2018 17:59:39
→ sarafciel: "hope junior remembers" 你怎麼會理解成他有保護.... 06/30 13:51
→ sarafciel: 他裡面那三個.c檔 是不同的人在寫的code 06/30 13:55
→ sarafciel: 第一個vtimertask()只是跟你示意說lSecondsToday需要被 06/30 13:59
→ sarafciel: 保護 所以後面hacker跟junior這兩個想使用它的時候 06/30 14:01
→ sarafciel: 應該也要用semphore保護 問題是他不知道hacker跟junor 06/30 14:02
→ sarafciel: 他們會不會加 或著是寫一寫忘記這個變數是該被保護的結 06/30 14:04
→ sarafciel: 果沒加 那最保險的做法就是他們要用的時候封裝成一個 06/30 14:04
→ sarafciel: function去保護變數 06/30 14:08
→ sarafciel: 至於use the same semaphore 我換個角度跟你講 06/30 14:11
→ sarafciel: 我把變數包起來 跟把整個迴圈 甚至整個main包起來 06/30 14:15
→ sarafciel: 這些也都是use the same semaphore 問題是後面兩個 06/30 14:17
→ sarafciel: 會把semaphore拿著太久 造成其他thread不必要的等待 06/30 14:18
謝謝你的解釋,我不懂的原因是因為我卡在這句英文:
At least some of those bugs stem from undisciplined use: allowing code in many
different modules to use the same semaphore and hoping that they all use it
correctly.
我一開始把"允許不同module內的code使用一樣的semaphore"認為是undisciplined use,
仔細看了一遍,原來作者的意思是"允許不同module內的code使用一樣的semaphore,且希
望他們正確地使用"這一整段話才是undisciplined use。
※ 編輯: zzss2003 (60.251.49.183), 07/02/2018 13:59:34