2010-03-26 53 views
7

在多線程的情況下,我有這樣的方法:等待狀態改變的方法應該是const嗎?

bool WaitForChange(time_duration WaitTime) const; 

此方法將等待或者直到對象的狀態已經改變,返回真,或直到超時超時(你怎麼說? )並返回false。

我的直覺是,const是爲了防止方法本身不需要的副作用,所以這很好。但是,再次,某些用戶可能會認爲該狀態不能改變,因爲該方法被聲明爲const。該用戶是愚蠢的,還是我應該使方法非const以避免混淆?

+0

你還等什麼?條件變量或睡眠輪詢? – nos 2010-03-26 14:13:47

+0

我正在使用'boost :: condition_variable'來等待和'boost :: mutex'進行鎖定。 – 2010-03-26 14:19:04

回答

10

通過聲明方法爲const,你說「調用此方法不會改變對象的狀態。」這是(希望)是真實的。所以讓它成爲常量。

如果有人認爲,常量意味着「這個方法被調用時,沒有其他人可以改變對象狀態」,而不是那個人錯誤的。

4

我投給constness。

本身並不能改變什麼方法,只是等待......

0

如果您正在等待查看對象成員是否已更改......那麼volatile怎麼辦?

bool WaitForChange(time_duration WaitTime) volatile 

const意味着對象的狀態是整個函數調用一樣的,所以我不會用它。另一方面,volatile向編譯器指出,只要訪問成員,就應該重新獲取成員,如果您正在尋找更改,這可能是您想要的。

+0

-1你把語法混淆成習慣用法。 'const'保證函數不會「修改被調用的對象的狀態」。那只是別的。只有當「一個實體的價值被超語言的手段改變時才需要」volatile「,例如,一個實時時鐘。 (這兩個引用來自Stroustrup,http://www2.research.att.com/~bs/glossary.html) – egrunin 2010-03-26 15:44:10

相關問題