【问题标题】:is glibc c11 thread implementation a wrapper on top of pthread?glibc c11 线程实现是 pthread 之上的包装器吗?
【发布时间】:2020-12-01 19:47:56
【问题描述】:

要使用 glibc 构建 c11 线程程序,我仍然需要与 -lpthread 链接,为什么? glibc 2.28 声称支持 c11 线程,但为什么我还需要 pthread?

musl 可以在没有 pthread 的情况下构建 c11 线程。

【问题讨论】:

    标签: multithreading pthreads glibc c11 musl


    【解决方案1】:

    是的,glibc 的 C11 线程实现在下面使用 pthreads 库,这就是它需要与 pthread 库链接的原因。在 glibc 中,pthreads(过去一直)是一个单独的库 - 因此需要链接它。

    而在 musl 库中,线程实现是主 C 库本身的一部分,因此无论您使用 pthreads 还是 C11 线程与 musl 都无需链接任何线程库。另请参阅https://www.openwall.com/lists/musl/2012/07/25/3

    【讨论】:

    • 基于此线程sourceware.org/bugzilla/show_bug.cgi?id=14092 似乎从 2.28 开始独立于 pthread 添加了 c11 线程,但事实并非如此。
    • 我不认为 bugzilla 声称 C11 线程是一个单独/独立的实现——只是一些关于使用内部类型的讨论。在任何情况下,您都可以看到glibc code(参见thrd_* 实现)它们共享相同的internal implementation
    • 你是对的,glibc 只是在其 NPTL pthread 代码之上添加了一个包装器来实现 c11 线程。对于 musl,它是类似的,虽然 musl 有自己的 pthread 实现。
    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多