c – ucontext和线程本地存储
我要问的平台是
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(尽管它也不支持光纤本地存储). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |