C + + 11:是Linux上的std ::线程取决于pthread库?【JAVA教程】

!
也想出现在这里? 联系我们
信息

C + + 11:是Linux上的std ::线程取决于pthread库?,第1张

概述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库?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞77 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容