作者qrtt1 (有些事,有時候。。。)
看板Soft_Job
標題Re: [請益] 關於 library 的定義?
時間Fri Mar 30 09:07:18 2012
※ 引述《fuha (mimi)》之銘言:
: 是這樣的
: 最近有一位朋友 問我 library 到底要不要擁有 states
: 他這這樣說我大概懂意思
: 譬如 libusb 的code
: 一開始先要用
: int libusb_init (libusb_context ** )
: 得到libusb_context 這個指標看 source code 就知道
: 是一些內部用的 pthread_mutex_t 之類的
: 這樣 不同的 User就可以不會互相干擾的使用這個 library
: 這樣感覺上就是 無狀態的 library ? 不知道我這樣理解對嗎??
: 那回到問題來 library 在設計上有一定要類似上述做法嗎?
: 不知道各位板上各位 對這個問題有什麼想法?
: 才學疏淺 所以我也不知道要怎麼回答~
: 所以上來賜教~
重點不是有沒有狀態,而是如何管理狀態。
並且保證在需要狀態的情況下,
不同時間、不同的 caller 呼叫順序不會影響結果。
同時間、不同的 caller 呼叫順序不會影響結果
做到前者,至少狀態的管理算合格,
但你無法在文件上說你的 library 保證 thread-safe
做到後者,並行的操作時的狀態管理,
無論是來自於外部的行為,或內部的操作都確保狀態不被污染。
在 c 裡面,常會用 struct 包出個 XXX_context。
其實意思就是將狀態『封裝』在這結構之內。
古早的說法好像是:table driven !?
而 function 的實作就單純只有邏輯,
依收到的 XXX_context 內容來決定能 fucntion 的行為。
所以,有沒有狀態其實不是個問題,
真正的問題是實作者有沒有妥善管理狀態。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.72.110.37
推 littleshan:我猜他的狀態是指「global state」 03/30 10:06
→ legnaleurc:他的意思是像 strtok 這種狀態嗎? 03/30 16:50
→ fuha:這個回覆的確是我想問的~ 因為我認真看了一下linux 一般的 03/30 21:17
→ fuha:library 都會使用 xx_context這種手法做無狀態的切割,所以想 03/30 21:18
→ fuha:了解一下~ 感謝 qrtt1~ 03/30 21:20