在C++的const function存取mutex
在 C++ 中寫 Multi-thread program的時候,為了 Thread-Safety 經常會在裡面塞 std::mutex
。
class ThreadSafe {
public:
int get() const;
void set(int value);
private:
std::mutex _lock;
int data;
};
但這時問題就來了, mutex::lock()
/ mutex::unlock()
並不是 const member function,因此在 get()
中 lock mutex 的時候,想必會編譯失敗。
難道我們就得因此犧牲 const member function 的使用嗎?
其實 C++ 有一個鮮為人知的關鍵字 mutable
,他的功能是讓某個 field 可以在 const member function 中被修改:
class ThreadSafe {
public:
int get() const;
void set(int value);
private:
mutable std::mutex _lock;
int data;
};
如此一來就可以完美解決這個問題了~
P.S. 請不要隨意的濫用 mutable
關鍵字!容易導致程式未來難以維護或是定義與實做不一的問題 (容易被其他人或是未來的自己幹譙 XD)