【问题标题】:Is double colon access (::) to class member thread safe?对类成员线程的双冒号访问 (::) 是否安全?
【发布时间】:2016-05-03 06:39:52
【问题描述】:

类成员的调用有两种方式,一种是直接使用点号(.)引用特定对象的成员函数,另一种是使用双冒号,例如Obj::function()

我的问题是,对成员的双冒号调用是线程安全的操作吗?

【问题讨论】:

  • 我不认为:: 概括地说任何事情 都是关于线程安全的。可能您必须询问您计划使用的库的作者和/或阅读该库的文档。
  • 双冒号::范围操作符。它只是一个表示作用域的运算符,没有别的。
  • 双冒号在运行时是不存在的……它只是被编译器用来选择正确的方法来调用在编译时

标签: c++ class oop object


【解决方案1】:

对成员的双冒号调用是线程安全的操作吗?

如果调用的函数是线程安全的,则它是线程安全的。例如:

class C
{
    static std::string mx;

public:
    static std::string fx(const char* x) { mx = x; return mx; } // NOT THREAD SAFE
    static std::string fy(const char* y) { return y; } // THREAD SAFE
};

您可以调用任一函数:

cout << C::fx("hello") << endl; // NOT THREAD SAFE
cout << C::fy("world") << endl; // THREAD SAFE

所以和两个冒号无关,和方法实现有关。

【讨论】:

    【解决方案2】:

    :: 是您在运行时甚至不必担心的问题。所以是的,它是线程安全的,因为当线程开始行动时,它就已经解决了。

    :: 仅用于明确在名称不明确的情况下引用了哪个命名空间或类范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多