C_and_CPP 板


LINE

source: an embedded software primer 1ed by Simon 正確的code: https://ideone.com/pRhTMU 錯誤的code: https://ideone.com/M2ZRJB 很明顯地可以看出這兩段程式碼的差別在於: 一個有用函式lSecondsSinceMidnight把變數 lSecondsToday包起來,一個是直接對變數lSecondsToday做access的動作。 這兩段code都有用semaphore把lSecondsToday給包起來。 作者說第二種錯誤的方式會有bug,但,既然都已經用semaphore把lSecondsToday包起來了 ,怎麼會有bug的發生呢?為什麼要多用一層lSecondsSinceMidnight把變數給包起來? 打到這裡突然看到作者說的一段話: At least some of bugs stem from undisciplined use: allowing code in many diffe- rent modules to use the same semaphore and hoping that they all use it correct- ly. You can squash there bugs before they get crawling simply by hiding the semaph- ore and the data that is protects inside of a module, thereby encapsulating bo- th. 作者說把semaphore與semaphore要保護的data放在module裡可以防止"code in many diff- erent modules to use the same semaphore". 但...在第一種正確的方式,function vHackerTask與vJuniorProgrammerTask都呼叫同一 個function lSecondsSinceMidnight,不也是"use the same semaphore"嗎? 想請教各位前輩是不是我誤會了什麼?謝謝 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.85.243
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1530244718.A.D72.html
1F:→ bluesoul: 第二段code迴圈的部分沒有保護 06/29 12:06
有,迴圈上有comment,有說hope junior remembers to use the semaphore
2F:→ sarafciel: 他那段話不是在否定use the same of semaphore這件事 06/29 13:20
3F:→ sarafciel: 簡單的講就是 你不知道用你的code的人是雷包還是大師 06/29 13:23
4F:→ sarafciel: 那麼讓他們去寫semaphore 你也不知道他們寫得對不對 06/29 13:26
5F:→ sarafciel: 還不如你自己實作正確的同步函式給他們call比較好 06/29 13:26
6F:→ sarafciel: 講同步不太精確....應該說可平行化 06/29 13:28
其實我認為這段不是在表達這個意思。GetSemaphore與GiveSemaphore都是廠商提供的fun- ction,作者是站在"function的使用者"的角度去表達這段話 ※ 編輯: zzss2003 (60.251.49.183), 06/29/2018 17:59:39
7F:→ sarafciel: "hope junior remembers" 你怎麼會理解成他有保護.... 06/30 13:51
8F:→ sarafciel: 他裡面那三個.c檔 是不同的人在寫的code 06/30 13:55
9F:→ sarafciel: 第一個vtimertask()只是跟你示意說lSecondsToday需要被 06/30 13:59
10F:→ sarafciel: 保護 所以後面hacker跟junior這兩個想使用它的時候 06/30 14:01
11F:→ sarafciel: 應該也要用semphore保護 問題是他不知道hacker跟junor 06/30 14:02
12F:→ sarafciel: 他們會不會加 或著是寫一寫忘記這個變數是該被保護的結 06/30 14:04
13F:→ sarafciel: 果沒加 那最保險的做法就是他們要用的時候封裝成一個 06/30 14:04
14F:→ sarafciel: function去保護變數 06/30 14:08
15F:→ sarafciel: 至於use the same semaphore 我換個角度跟你講 06/30 14:11
16F:→ sarafciel: 我把變數包起來 跟把整個迴圈 甚至整個main包起來 06/30 14:15
17F:→ sarafciel: 這些也都是use the same semaphore 問題是後面兩個 06/30 14:17
18F:→ 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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP