加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – ucontext和线程本地存储

发布时间:2020-12-16 07:32:16 所属栏目:百科 来源:网络整理
导读:我要问的平台是 linux.我正在谈论的线程本地存储是gcc中的pthread_xxx或__thread. 我想在我的程序中使用ucontext的东西,即makecontext,swapcontext等.所以我的问题是,它如何与线程本地存储一起使用?更具体地说,如果我使用swapcontext或setcontext切换到另一
我要问的平台是 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平台确实具有线程本地存储和光纤本地存储.

解决方法

它没有明确规定线程本地存储如何与setcontext / swapcontext交互.

在Linux上,线程本地存储不受setcontext / swapcontext的影响,并且某些软件依赖于该行为 – 请参阅netbsd邮件列表上的最新讨论以获得进一步的见解:swapcontext() around pthreads

在C:TLS_and_Parallelism.pdf中还有一些关于TLS与并行性相互作用的想法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读