【问题标题】:ucontext and thread local storageucontext 和线程本地存储
【发布时间】:2012-09-12 05:29:20
【问题描述】:

我要问的平台是linux。我说的线程本地存储是gcc中的pthread_xxx__thread

我想在我的程序中使用 ucontext 的东西,即 makecontext、swapcontext 等。所以我的问题是,它如何与线程本地存储一起工作?更具体地说,如果我使用 swapcontext 或 setcontext 切换到另一个纤程,线程本地存储是否也会发生变化,或者线程本地存储不是上下文的一部分?

另一个问题:如果 TLS 将被setcontext/swapcontext 更改,那么无论我如何更改上下文,是否有任何东西会粘在线程上?另一方面,如果 TLS 会坚持上下文,那么有什么东西会坚持线程并且不会被 setcontext/swapcontext 改变吗?

根据http://en.wikipedia.org/wiki/Fiber_(computer_science),Windows 平台确实有线程本地存储和光纤本地存储。

【问题讨论】:

    标签: c++ linux gcc pthreads thread-local-storage


    【解决方案1】:

    没有很好的说明线程本地存储如何与 setcontext/swapcontext 交互。

    在 Linux 上,线程本地存储不受 setcontext/swapcontext 的影响,一些软件依赖于这种行为 - 请参阅 netbsd 邮件列表中最近的讨论以获取更多见解:swapcontext() around pthreads

    还有一些关于 TLS 与 C++ 中的并行性交互的想法:TLS_and_Parallelism.pdf

    编辑:还值得指出的是 makecontext/swapcontext 已从 The Open Group Base Specifications Issue 7 中删除,因为它们已被标记为过时一段时间。作为替代方案,Boost.Context 最近已添加到 Boost 库中(尽管它也不支持光纤本地存储)。

    【讨论】:

    • 谢谢,我验证了 TLS 不受 linux 上的上下文变化的影响。所以我的进一步问题是,Linux 中是否有任何光纤本地存储?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多