c++ - 使用临时对象来初始化线程

标签 c++ multithreading initialization move object-lifetime

使用临时线程对象初始化线程是否错误,该对象在线程执行期间可能会超出范围?

在下面给出的程序中,我尝试了下面给出的两种方法,并且它们都运行没有任何错误。

#include<thread>
using namespace std;

void consumer()
{
  for(;;)
   {}
}

int main()
{
  thread t[5];

  for(int i=0;i<5;i++)
  {
    /*
      * Method 1
      t[i]=std::thread(consumer);
    */

    /*
     * Method 2
     thread local(consumer);
     t[i]=std::move(local);
    */

     t[i].detach();
   }
   while(1)
    {}
   return 0;
}

最佳答案

两种方法都可以正常工作。

更准确地说,operator=在两种情况下都执行 move 。因此,创建的线程的状态保存在 t[i] 中,并且在赋值之后,临时(情况 1)或 本地 (情况 2)都设置为默认构造的线程,在结束语句(情况 1)或退出 block (情况 2)时可能会终止。

关于c++ - 使用临时对象来初始化线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55157064/

相关文章:

C:用户(线程)不能发送消息的简单聊天程序

c++ - 我在解释 N4140 的§8.5.3/5 段中的要点 (5.2.1.1) 时遇到了一些困难

c++ - 初始化私有(private)静态变量c++

c++ - 在 C++ 中将 wchar_t 打印到控制台

c++ - 如何在不同用户下为目标进程复制套接字

Python 多处理和 wxPython 协同工作

java - 如何在多线程应用程序中自动更新ConcurrentMap的值?

php - 可以只用键初始化 PHP 数组吗?

c++ - 用于包含目录的 CMAKE 选项

c++ - 使用字体资源编译