user-0 提问: gcc 4.9.0 安装后，无法编译 C11程序,能编译 C++2011,缺  threads.h

回复:
user: user-1
content: c语言由于没有命名空间，标准库里的线程库虽然来源于pthread，但是名称不一样。  我建议是你先按pthread来命名，然后等c11标准支持之后，再#define过来。

user: user-2
content: theads.h只是 建议标准 LLVM都不支持的。

user: user-3
content: 语法糖越甜，编译调试查错越苦！ 把有限的生命浪费在品尝/品鉴无穷多种的语法糖中，我认为不值当。

user: user-0
content: 最新的 glibc 2.19 和 glibc 2.17(也就是红帽子昨天发布的版本携带的) 也没有发现这个  threads.h   真是啧啧怪事啊！！！

user: user-4
content: 引用 24 楼 hzhxxx 的回复:创建文件test_gcc4.9.c,内容如下: #include <string.h> #include <stdio.h> //注意这行,路径不一致 #include <thr/threads.h>  //注意这个,函数定义必须是 //typedef int(*_Thrd_start_t)(void *); int fun(void *data) {         printf("thread=%d\n", thrd_current());         return 0; }  int main(int argc,char *argv[]) {         thrd_t loc;     thrd_create(&loc, fun,0);     thrd_join(loc,0);         return 0; }  编译执行,注意看参数 -std=c11,-lgcc_s,证明是使用新标准 查看链接的动态库,是新的库 呜呼,无法编译成功，无法执行正常!!! #/usr/local/gcc-4.9.0/bin/gcc -Wwrite-strings -std=c11 test_gcc4.9.c -o test_gcc4.9 -I/usr/local/gcc-4.9.0/include -L/usr/local/gcc-4.9.0/lib64 -lgcc_s -lpthread; #test_gcc4.9.c:4:21: 致命错误：threads.h：没有那个文件或目录  #include <threads.h>                      ^ 编译中断。  后记： 安装免费的 visual studio express 2013 后,正确编译后运行正常; 看来，学习 c++ 2011 或者 C11 的选择还是 vs2013靠谱。  C11不如C++11有意思。

user: user-0
content: 创建文件test_gcc4.9.c,内容如下: #include <string.h> #include <stdio.h> //注意这行,路径不一致 #include <thr/threads.h>  //注意这个,函数定义必须是 //typedef int(*_Thrd_start_t)(void *); int fun(void *data) {         printf("thread=%d\n", thrd_current());         return 0; }  int main(int argc,char *argv[]) {         thrd_t loc;     thrd_create(&loc, fun,0);     thrd_join(loc,0);         return 0; }  编译执行,注意看参数 -std=c11,-lgcc_s,证明是使用新标准 查看链接的动态库,是新的库 呜呼,无法编译成功，无法执行正常!!! #/usr/local/gcc-4.9.0/bin/gcc -Wwrite-strings -std=c11 test_gcc4.9.c -o test_gcc4.9 -I/usr/local/gcc-4.9.0/include -L/usr/local/gcc-4.9.0/lib64 -lgcc_s -lpthread; #test_gcc4.9.c:4:21: 致命错误：threads.h：没有那个文件或目录  #include <threads.h>                      ^ 编译中断。  后记： 安装免费的 visual studio express 2013 后,正确编译后运行正常; 看来，学习 c++ 2011 或者 C11 的选择还是 vs2013靠谱。

user: user-0
content: 我也认为这个是不是会造成 分裂，嘿嘿

user: user-5
content: 引用 13 楼 mymtom 的回复:是thread吧，不是thread.h啊  #include <iostream> #include <thread> #include <chrono> #include <mutex>   std::mutex g_display_mutex;   void foo() {     std::thread::id this_id = std::this_thread::get_id();       g_display_mutex.lock();     std::cout << "thread " << this_id << " sleeping...\n";     g_display_mutex.unlock();       std::this_thread::sleep_for(std::chrono::seconds(1)); }   int main() {     std::thread t1(foo);     std::thread t2(foo);       t1.join();     t2.join(); }   ++ ， 楼主 ， C++中标准库都是没有.h后缀的。

user: user-6
content: 是thread吧，不是thread.h啊  #include <iostream> #include <thread> #include <chrono> #include <mutex>   std::mutex g_display_mutex;   void foo() {     std::thread::id this_id = std::this_thread::get_id();       g_display_mutex.lock();     std::cout << "thread " << this_id << " sleeping...\n";     g_display_mutex.unlock();       std::this_thread::sleep_for(std::chrono::seconds(1)); }   int main() {     std::thread t1(foo);     std::thread t2(foo);       t1.join();     t2.join(); }

user: user-0
content: vs2013 express 安装完成后，终于把例子运行起来了！！！很多差异，大家看看 C11。  #include <map> //注意这行,路径不一致 #include <thr/threads.h> #include <string> #include <stdio.h> #include <iostream> using namespace std;  //注意这个,函数定义必须是 //typedef int(*_Thrd_start_t)(void *); int f(void * data) { 	printf("thread=%d\n", thrd_current()); 	std::map<std::string, std::string> m; 	m.insert(std::make_pair("a1", "b2")); 	m.insert(std::make_pair("a2", "b1")); 	for (auto iter = m.begin(); iter != m.end(); ++iter) 	{ 		std::cout << "key=" << iter->first << ",value=" << iter->second << endl; 	} 	return 0; }  int _tmain(int argc, _TCHAR* argv[]) { 	thrd_t t; 	//typedef int (*_Thrd_start_t)(void *); 	thrd_create(&t, f, 0); 	thrd_join(t,0); 	system("pause"); 	return 0; }

user: user-0
content: 引用 21 楼 daiweifeng 的回复:我的Visual Studio Express 2013里倒是有支持threads.h库，看来是gcc自己的问题  错误	1	error C1083: 无法打开包括文件: “threads.h”: No such file or directory	d:\cpp11\consoleapplication1\consoleapplication1\consoleapplication1.cpp	8	1	ConsoleApplication1   我安装的 vs2013 express 没有这个文件啊，悲剧鸟？？

user: user-4
content: 我的Visual Studio Express 2013里倒是有支持threads.h库，看来是gcc自己的问题

user: user-4
content: 引用 19 楼 hzhxxx 的回复:按C11标准,线程库确实是   threads.h  那就是现在没有编译器完整支持这东西。我的4.8.1也没有这东西。

user: user-0
content: 按C11标准,线程库确实是   threads.h

user: user-4
content: 引用 17 楼 hzhxxx 的回复:[quote=引用 16 楼 daiweifeng 的回复:] 楼主先确定到底是C语言还是C++语言。 编译时使用g++作编译程序，参数使用-std=c++11。C++和C的默认头文件是不一样的。  标题上说明很清楚吧。  编译也是用的 gcc,链接也是 libgcc,不是 libstdc++.so啊 #/usr/local/gcc-4.9.0/bin/gcc -Wwrite-strings -std=c11 test_gcc4.9.c -o test_gcc4.9 -I/usr/local/gcc-4.9.0/include -L/usr/local/gcc-4.9.0/lib64 -lgcc_s -lpthread; [/quote]  C语言里没有threads.h这个头文件，C++里有thread这个头文件。 你想用C++11标准的线程库的话当然要用C++标准编译器咯。  或者你换成pthread.h试试看。

user: user-0
content: 引用 16 楼 daiweifeng 的回复:楼主先确定到底是C语言还是C++语言。 编译时使用g++作编译程序，参数使用-std=c++11。C++和C的默认头文件是不一样的。  标题上说明很清楚吧。  编译也是用的 gcc,链接也是 libgcc,不是 libstdc++.so啊 #/usr/local/gcc-4.9.0/bin/gcc -Wwrite-strings -std=c11 test_gcc4.9.c -o test_gcc4.9 -I/usr/local/gcc-4.9.0/include -L/usr/local/gcc-4.9.0/lib64 -lgcc_s -lpthread;

user: user-7
content: 传说，貌似，可能，GCC对C11标准支持不完整吧？

user: user-4
content: 楼主先确定到底是C语言还是C++语言。 编译时使用g++作编译程序，参数使用-std=c++11。C++和C的默认头文件是不一样的。

user: user-4
content: -std=c++11 #include<thread>  必须是C++11不是C11，一般现在只有C99，C11和以后的可能更多的用于异构计算

user: user-8
content: 我记得用的是pthread.h这个头文件。。。