2011-03-13 27 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