2011-03-13 63 views
0

下面的代碼:這個函數(操作符重載)線程安全嗎?

ElementType& operator[] (int key) 
{ 
    //something like boost::mutex::scoped_lock 
    MutexLockType lock(); 

    if(key < 0 || key > m_bound) 
     throw std::range_error("access out of bound"); 

    return m_elements[key]; 
} 
+0

不,它不是 - 你怎麼知道,當你的鎖被釋放時,元素不會被刪除? – Erik 2011-03-13 13:40:57

回答

3

不,它不是因爲你已經允許一個元素基準漏出的功能和鎖的安全性了。

更重要的是,線程安全性的問題有點難以回答,只需要what flavour of thread-safety就是您所期望的。至少你需要向我們展示m_elementsm_bound的其他訪問權限。

+0

的確是一個非常好的答案。我只是被抓住了,並提供了一個完整的錯誤答案......沒有清楚地看到它。 – celavek 2011-03-13 13:50:31

1

在這個確切的例子中,當你意識到根本沒有鎖時,你會更加驚訝,只是聲明一個返回LockType的lock()函數。

不是說它無論如何都會有鎖幫助。

+0

這可能比回答更好,但是我反正喜歡它,因爲它需要被指出(並且對於C中的非灰狗來說是一個令人討厭的驚喜)。 – 2011-03-13 17:04:09