[英]Cancelling a C++11 std::thread during a recvfrom syscall?
[英]C++11: Is std::thread on linux depending on pthread library?
我读到pthread是C库并且与C ++对象模型不兼容,尤其是在讨论异常处理时。
所以我想知道在linux系统上,gcc / clang如何实现std::thread
,它是调用一些linux本机函数/内核apis还是什么?
另外,如何实现std::thread_local
,与__thread
相关?
我读到pthread是C库并且与C ++对象模型不兼容,尤其是在讨论异常处理时。
此信息不准确。
gcc / clang如何实现
std::thread
他们调用特定于平台的线程创建函数。 在Linux上它是pthread_create
。 您可以直接调用此函数。
当一个线程抛出异常并且没有被捕获时,调用std::terminate
。
请注意,您的应用程序必须使用-pthread
标志进行编译和链接(使用-lpthread
是不必要的,并且C和C ++都不够)。
我读到pthread是C库并且与C ++对象模型不兼容,尤其是在讨论异常处理时。
在这附近有一个声明是正确的,但这样的陈述是不正确的。
这里有两个事实。
如果您自己调用pthreads函数,它确实只是一个C库,您最好确保在异常安全方面正确地执行所有操作。 如果将函数指针传递给pthread_create_...
并且这些函数将抛出异常...您的程序可能会遇到大问题。 这应该是显而易见的,每当你从C ++与C库交谈时都会如此。
这并不意味着使用C ++程序就不可能使用这样的库!
pthread实际上并不需要知道您的任何对象,或任何ctors或dtors,或任何其他,以使您的程序多线程。 所有它需要产生一个线程,是一个函数指针,该函数指针将具有完全C兼容的签名。
当C ++编译器调用pthreads函数以实现std::thread
,编译器将发出与pthread正确对话的代码。 如果它以非法方式使用pthread来实现您的C ++程序,那么它就是编译器或标准库中的一个错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.