概述C + + 11:是Linux上的std ::线程取决于pthread库?
我读到pthread是C库,并且与C ++对象模型不兼容,特别是在讨论exception处理时。
所以我想在linux系统上知道gcc / clang是如何实现std::thread ,它是调用一些linux本地函数/内核APIs还是什么的?
另外,如何实现与__thread相关的std::thread_local ?
奇怪的BUG – std :: regex只匹配前两个string
windows上的C ++ 11
铛是使用错误的系统包含目录
并发问题在C + + 11
获取核心的独占所有权,并用C ++禁用它的中断
构build使用C ++ 11function的Python扩展的问题
你需要安装使用Clang在windows上构build64位的C + + 14?
如何获得使用标准库创build的线程的winAPI ID?
std :: regex_replace给了我意想不到的结果
C ++ wcout unocode(西里尔文,日文)
在编译器输出上使用ldd myExecutable来查找。
libstdc ++和libc ++显然都使用pthread,但是不需要这样做。 它的证据可以在这里和这里的 native_handle方法文档中找到 。 文件说:
访问* this的本地句柄。
这个函数的结果的含义和类型是实现定义的。 在POSIX系统上,这可能是一个类型为pthread_cond_t *的值。 在windows系统上,这可能是PCONDITION_VARIABLE。
和
返回实现定义的底层线程句柄。
我读到pthread是C库,并且与C ++对象模型不兼容,特别是在讨论异常处理时。
在附近有一个声明是真实的,但是这个陈述是不正确的。
这里有两个事实。
如果你自己调用pthreads函数,那实际上只是一个C库,而且你最好确保你在异常安全方面做的一切正确。 如果您将函数指针传递给pthread_create_…并且这些函数将抛出异常…您的程序可能会遇到大问题。 这应该是显而易见的,无论何时您从C ++与C库进行交谈,情况都是如此。
这并不意味着在C ++程序中使用这样的库是不可能的!
pthread实际上并不需要知道任何对象,或者它们的任何ctors或dtors,或者任何这些对象,以使您的程序成为多线程的。 所有它需要产生一个线程,是一个函数指针,并且该函数指针将具有完全C兼容的签名。
当C ++编译器为了实现std::thread调用pthreads函数时,编译器会发出与pthread正确对话的代码。 如果以非法的方式使用pthread来实现C ++程序,那么这是编译器或标准库中的一个错误。
我读到pthread是C库,并且与C ++对象模型不兼容,特别是在讨论异常处理时。
这些信息是不准确的。
gcc / clang如何实现std::thread
他们调用一个特定于平台的线程创建函数。 在linux上是pthread_create 。 你可以直接调用这个函数。
当一个线程抛出一个异常,并且它没有被捕获std::terminate被调用。
请注意,您的应用程序必须编译并链接到-pthread标志(对于C和C ++,使用-lpthread是不必要的和不足的)。
总结
以上是内存溢出为你收集整理的C + + 11:是Linux上的std ::线程取决于pthread库?全部内容,希望文章能够帮你解决C + + 11:是Linux上的std ::线程取决于pthread库?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容