看板 Soft_Job 關於我們 聯絡資訊
※ 引述《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