Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何启用实验C++;MinGW中的11个并发特性?_C++_Gcc_Concurrency_C++11_Mingw - Fatal编程技术网

C++ 如何启用实验C++;MinGW中的11个并发特性?

C++ 如何启用实验C++;MinGW中的11个并发特性?,c++,gcc,concurrency,c++11,mingw,C++,Gcc,Concurrency,C++11,Mingw,当试图编译以下代码时 #include <thread> #include <iostream> void foo() { std::cout << "foo\n"; } int main() { std::thread t(foo); t.join(); } 如何使用C++11实验并发特性?我有MinGW GCC 4.5.1(TDM) 编辑:顺便说一句,Visual Studio 2012在这个代码示例中表现良好。说它已经实现,但您可能需要一个

当试图编译以下代码时

#include <thread>
#include <iostream>

void foo() { std::cout << "foo\n"; }

int main()
{
  std::thread t(foo);
  t.join();
}
如何使用C++11实验并发特性?我有MinGW GCC 4.5.1(TDM)


编辑:顺便说一句,Visual Studio 2012在这个代码示例中表现良好。

说它已经实现,但您可能需要一个SVN版本来获得该页面上列出的所有内容。看起来它将帮助您获得最先进的构建。

据我所知,MinGW还不支持新的c++0x并发特性(从GCC 4.5开始)。我记得读过一次邮件列表交换,其中指出在MinGW中,线程头中的以下ifdef不满足:

#if defined(_GLIBCXX_HAS_GTHREADS)
我想这与在Windows下构建MinGW的方式有关,无论它使用本机线程还是pthread,等等。在我的代码中,我编写了一些在Windows中使用Boost.thread而不是本机c++0x线程的最小包装。这两个接口非常相似,对于许多用途,它们可以毫无问题地交换

编辑:感谢Luc Danton挖掘出上述邮件列表线程:


当您得到一个支持
std::thread
的编译器时,下面是您的更正示例(两个较小的o型):

#包括
#包括

void foo(){std::cout正如其他人所提到的,gcc的mingw端口不提供现成的C++0x并发支持。但是,商业版提供了这些功能,因此您可以使用
std::thread


免责声明:我是just::thread库的主要开发人员。

我目前正在开发一个使用新的mingw-w64 winpthreads库的GCC。这将在GCC中启用posix线程模型,并正在努力使其正常工作。另一个mingw-w64用户已经通过黑客攻击实现了这一功能大约(合理地),但我试图在主线GCC中完成它,在工具链安装后不需要手动干预

现在的讨论可以继续下去。一旦所有粗糙的边缘都被磨平了,我会更新这个答案

编辑:由于一次升级投票,我注意到了这个答案。我已经构建了一个实验性的GCC 4.7,它应该与
std::thread
一起工作,但只有在静态链接时(将
-static
添加到link命令中)。公告如下。

尝试MinGw构建:


此安装程序将允许您选择所需的任何MinGW,并且还包括c++11线程功能。

还有另一个选项

//Threading01.cpp

#include <thread>
#include <iostream>

void hello()
{
    std::cout<< "Hello Threading ..." << std::endl;
}

int main()
{
    std::thread t1(hello);
    t1.join();

    return 0;
}

std::threads和sync原语已经有了轻量级的本机实现:


这是一个只包含头的库,它应该可以与任何C++11版本的MinGW一起使用。

所讨论的交换:@Luc:感谢交换,它们在这里可能存在可移植性问题。仅供参考:std::thread和boost::thread的DTOR对于仍然可连接的线程具有完全不同的语义链接已失效且不可用的(下图)指向一个非常轻的包装头谢谢。我修正了问题中的拼写错误。很遗憾,这不是一个真正的答案。请看这个。
#include <thread>
#include <iostream>

void foo() { std::cout << "foo\n"; }

int main()
{
  std::thread t(foo);
  t.join();
}
//Threading01.cpp

#include <thread>
#include <iostream>

void hello()
{
    std::cout<< "Hello Threading ..." << std::endl;
}

int main()
{
    std::thread t1(hello);
    t1.join();

    return 0;
}
C:\CPP>g++ std=c++11 -g -Wall -lpthread -o Threading01 Threading01.cpp