我要问的平台是linux。我所说的线程本地存储是gcc中的pthread_xxx或__thread。
我想在我的程序中使用use,即makecontext,swapcontext等。所以我的问题是,它是如何与线程本地存储一起工作的?更具体地说,如果我使用swapcontext或setcontext切换到另一个光纤,线程本地存储也会改变,还是线程本地存储不是上下文的一部分?
另一个问题:如果TLS将被setcontext/swapcontext更改,那么无论我如何更改上下文,是否有任何东西会粘在线程上?另一方面,如果TLS将坚持上下文,那么是否有任何东西会粘在线程上而不会被setcontext/swapcontext所更改?
根据科学)的说法,Windows有线程本地存储和光纤本地存储.
发布于 2012-09-12 06:26:52
它没有很好地指定线程本地存储如何与setcontext/swapcontext交互。
在Linux上,线程本地存储不受setcontext/swapcontext的影响,一些软件依赖于这种行为--请参阅最近关于netbsd邮件列表的讨论,以了解更多信息:围绕p线程的swapcontext()。
此外,还对C++:Parallelism.pdf中有关TLS与并行交互的一些思考。
编辑:也值得指出的是,makecontext/swapcontext已经从Open规范问题7中删除,因为它们已经被标记为过时一段时间了。作为替代,Boost.Context最近被添加到Boost库中(尽管它也不支持光纤本地存储)。
https://stackoverflow.com/questions/12381716
复制相似问题