27
A
回答
41
您可以用關鍵字mutable
標記數據成員,讓他們在不斷進行修改成員函數,例如:
struct foo
{
mutable mutex foo_mutex;
// ....
void bar() const
{
auto_locker lock(foo_mutex);
// ...
}
};
嘗試這樣做盡可能少的,因爲濫用mutable
是邪惡的。
11
對於概念上爲const
的方法,我通常可以使用mutable
鎖和緩存。
特別是在緩存性能計算結果的情況下。這是嚴格意義上的實現細節,不應該成爲調用者關心的問題,因此刪除const
指定將等於抽象中的小泄漏。
用鎖,我會問自己,如果鎖只是一個私人實現細節。如果鎖與其他對象共享,那麼它實際上是接口的一部分。
在某些平臺上,通過句柄訪問鎖,因此您可以在方法上使用const
而不用擔心mutable
。
相關問題
- 1. C - 互斥鎖屬性
- 2. 互斥鎖和鎖
- 3. 正確使用互斥鎖的方法
- 4. 互斥鎖不能正常工作
- 5. 在C++ 98互斥鎖中鎖定變量共享數據互斥鎖
- 6. 如何正確刪除互斥鎖?
- 7. pthread_getspecific和互斥鎖
- 8. 信號量和互斥鎖定概念
- 9. C# - 鎖定互斥鎖問題
- 10. procs,fork()和互斥鎖
- 11. 約互斥和死鎖
- 12. 使用互斥鎖和condition_variables
- 13. 多線程和互斥鎖
- 14. C++線程和互斥鎖和條件變量
- 15. c C中的互斥鎖替換
- 16. C++中互斥鎖和臨界區之間的性能差異
- 17. C++線程死鎖互斥鎖異常終止
- 18. 遞歸和非遞歸鎖(互斥鎖)
- 19. C++ - 初始化和互斥鎖和自旋鎖
- 20. pthread_cond_wait不解鎖互斥鎖
- 21. 鎖定多個互斥鎖
- 22. 互斥鎖/解鎖命令
- 23. 釋放互斥鎖。
- 24. 實現互斥鎖?
- 25. C++常量,正確性和const成員
- 26. 確實需要使用互斥鎖嗎?
- 27. 多線程互斥鎖可以使用多個互斥鎖
- 28. 診斷互斥鎖相關瓶頸的正確方法
- 29. 提升作用域解鎖互斥量
- 30. pthread_once_t變量是否需要互斥鎖?
我認爲它取決於類的語義:在不同的情況下,不同的方法可能是有意義的。 – 2010-07-13 17:53:05
爲什麼你不想讓它成爲常量? – 2010-07-13 17:54:08
@Neil我有印象,應該避免mutable,但似乎互斥體是一個很好的候選人使用它,所以我想聽聽它是否好設計 – Anycorn 2010-07-13 17:57:15