在多線程的情況下,我有這樣的方法:等待狀態改變的方法應該是const嗎?
bool WaitForChange(time_duration WaitTime) const;
此方法將等待或者直到對象的狀態已經改變,返回真,或直到超時超時(你怎麼說? )並返回false。
我的直覺是,const
是爲了防止方法本身不需要的副作用,所以這很好。但是,再次,某些用戶可能會認爲該狀態不能改變,因爲該方法被聲明爲const
。該用戶是愚蠢的,還是我應該使方法非const
以避免混淆?
在多線程的情況下,我有這樣的方法:等待狀態改變的方法應該是const嗎?
bool WaitForChange(time_duration WaitTime) const;
此方法將等待或者直到對象的狀態已經改變,返回真,或直到超時超時(你怎麼說? )並返回false。
我的直覺是,const
是爲了防止方法本身不需要的副作用,所以這很好。但是,再次,某些用戶可能會認爲該狀態不能改變,因爲該方法被聲明爲const
。該用戶是愚蠢的,還是我應該使方法非const
以避免混淆?
通過聲明方法爲const,你說「調用此方法不會改變對象的狀態。」這是(希望)是真實的。所以讓它成爲常量。
如果有人認爲,常量意味着「這個方法被調用時,沒有其他人可以改變對象狀態」,而不是那個人錯誤的。
我投給constness。
本身並不能改變什麼方法,只是等待......
如果您正在等待查看對象成員是否已更改......那麼volatile怎麼辦?
bool WaitForChange(time_duration WaitTime) volatile
const
意味着對象的狀態是整個函數調用一樣的,所以我不會用它。另一方面,volatile
向編譯器指出,只要訪問成員,就應該重新獲取成員,如果您正在尋找更改,這可能是您想要的。
-1你把語法混淆成習慣用法。 'const'保證函數不會「修改被調用的對象的狀態」。那只是別的。只有當「一個實體的價值被超語言的手段改變時才需要」volatile「,例如,一個實時時鐘。 (這兩個引用來自Stroustrup,http://www2.research.att.com/~bs/glossary.html) – egrunin 2010-03-26 15:44:10
你還等什麼?條件變量或睡眠輪詢? – nos 2010-03-26 14:13:47
我正在使用'boost :: condition_variable'來等待和'boost :: mutex'進行鎖定。 – 2010-03-26 14:19:04