这个函数(运算符重载)是线程安全的吗?

发布于 2024-10-21 09:18:17 字数 277 浏览 1 评论 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];
}

Here's the code:

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];
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

染柒℉ 2024-10-28 09:18:17

不,这不是因为您允许元素的引用从函数中泄漏并远离锁的安全性。

更重要的是,如果没有更严格的规范,线程安全问题就有点难以回答 您最想要哪种类型的线程安全。至少您需要向我们展示 m_elementsm_bound 的所有其他访问权限。

No it is not because you have allowed a reference the element to leak out of the function and away from the safety of the lock.

What's more, thread-safety questions are a little hard to answer without a harder specification of just what flavour of thread-safety you are desirest. At the very least you would need to show us every other access of m_elements and m_bound.

呆° 2024-10-28 09:18:17

在这个确切的示例中,当您意识到根本没有锁,只有返回 LockType 的 lock() 函数的声明时,您会更加惊讶。

无论如何,这并不是说它会对锁有帮助。

In this exact example you would be even more surprised when you realize that there is no lock at all, just a declaration of a lock() function that returns a LockType.

Not that that it would have helped with a lock anyway.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文