【问题标题】:What does Thread::yield() mean in this context?Thread::yield() 在这种情况下是什么意思?
【发布时间】:2014-10-27 07:36:00
【问题描述】:

我正在尝试理解一个类,这是我们必须完成的作业的一部分,但我不理解某些语法:

void sleep() 
    { 
        Thread::yield(); 
    } // implicit unlock()

什么是 Thread::yield();意思是?那是哪个线程?此 Thread 对象的代码中没有声明。什么是 :: ?

【问题讨论】:

  • 需要更多上下文...Thread 是什么?众多 C++ 线程库之一中的某个类?你自己的本土班级?
  • 在此上下文中,X::Y() 表示调用类型为X 的名为Y 的静态方法。所以下一步就是去Y的定义看看它做了什么。
  • @Jon 也可以是封装在 Thread 命名空间中的全局方法
  • 或者在派生类成员函数中显式调用基类成员函数。关键是因为没有足够的上下文,所以无法分辨。
  • 我觉得标题问“在这种情况下”很有趣,而且没有给出任何上下文。

标签: c++ syntax


【解决方案1】:

来电

Thread::yield();

表示调用一个名为 yield 的方法,该方法包含在 Thread 类或 namespace 中(它可以是只包含在命名空间中的全局方法)。 yield 这个名字暗示了it is a call made to give up the CPU cycles and enable other threads running。 在你的项目中搜索 Thread,你会发现它到底是什么。名为 yield 的方法应该存在于 Thread 类或命名空间中。

什么是 :: ?

:: 是一个作用域解析运算符

C++ 标准 n3337 § 3.4.3 限定名称查找

可以引用类或命名空间成员或枚举器的名称 在 :: 范围解析运算符 (5.1) 之后应用于 a 表示其类、命名空间或 枚举。如果 :: 范围解析运算符在 嵌套名称说明符前面没有 decltype 说明符,查找 :: 前面的名称仅考虑名称空间、类型和 特化为类型的模板。如果找到的名称没有 指定命名空间或类、枚举或依赖类型, 程序格式错误。[示例:

class A {
public:
    static int n;
};

int main() {
    int A;
    A::n = 42; // OK
    A b; // ill-formed: A does not name a type
}

——结束示例]

https://stackoverflow.com/a/9338301/1141471

【讨论】:

    【解决方案2】:

    所以基本上:: 意味着您正在调用 Thread 类的静态类方法(请注意,您不必创建类 Thread 的实例来调用该方法)。

    yield 操作会导致调用 sleep 方法的线程让出执行给其他等待的线程。基本上该线程被暂停,其他等待线程被允许运行。操作系统根据线程优先级和其他线程的状态重新调度休眠线程以在将来运行。

    【讨论】:

      【解决方案3】:

      可能这意味着您正在查看的函数是从Thread 派生的,而sleep 只是将“睡眠”的责任委托给父类的静态yield 函数。但是,我们真的需要看到更多才能确定。

      【讨论】:

        猜你喜欢
        • 2020-04-04
        • 2017-03-28
        • 2016-08-26
        • 2019-10-15
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 2014-03-27
        • 2016-10-05
        相关资源
        最近更新 更多