📜  C ++中的线程joinable()函数

📅  最后修改于: 2021-05-31 16:48:03             🧑  作者: Mango

Thread :: joinable是C++ std :: thread中的内置函数。它是一个观察器函数,表示它观察状态,然后返回相应的输出并检查线程对象是否可连接。

如果线程对象标识/表示执行中的活动线程,则称该线程对象是可连接的。

在以下情况下,线程不可联接:

  • 它是默认构造的
  • 如果其成员join或detach中的任何一个已被调用
  • 它已经转移到其他地方

句法:

std::thread::joinable()

参数:此函数不接受任何参数。

返回值:这是一个布尔型函数,当线程对象为
可加入的。如果线程对象不可连接,则返回false。

以下程序演示了std :: thread :: joinable()的用法

注意:在在线IDE上,此程序将显示错误。要对此进行编译,请在命令“ g ++ –std = C++ 14 -pthread file.cpp”的帮助下对g ++编译器使用标志“ -pthread

// C++ program to demonstrate the use of
// std::thread::joinable()
  
#include 
#include 
#include 
  
using namespace std;
  
// function to put thread to sleep
void threadFunc()
{
    std::this_thread::sleep_for(
        std::chrono::seconds(1));
}
  
int main()
{
    std::thread t1; // declaring the thread
  
    cout << "t1 joinable when default created? \n";
    // checking if it is joinable
    if (t1.joinable())
        cout << "YES\n";
    else
        cout << "NO\n";
  
    // calling the function threadFunc
    // to put thread to sleep
    t1 = std::thread(threadFunc);
  
    cout << "t1 joinable when put to sleep? \n";
  
    // checking if t1 is joinable
    if (t1.joinable())
        cout << "YES\n";
    else
        cout << "NO\n";
  
    // joining t1
    t1.join();
  
    // checking joinablity of t1 after calling join()
    cout << "t1 joinable after join is called? \n";
    if (t1.joinable())
        cout << "YES\n";
    else
        cout << "NO\n";
  
    return 0;
}

输出:

t1 joinable when default created? 
NO
t1 joinable when put to sleep? 
YES
t1 joinable after join is called? 
NO

注意:第三个输出将在1秒钟后出现,因为该线程已进入睡眠状态1分钟。

想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”