4

質問しているプラ​​ットフォームは Linux です。私が話しているスレッドローカルストレージはpthread_xxx、または__threadgccにあります。

プログラムで ucontext のもの、つまり makecontext、swapcontext などを使用したいと考えています。私の質問は、スレッドローカルストレージでどのように機能するのですか? 具体的には、swapcontext または setcontext を使用して別のファイバーに切り替えた場合、スレッド ローカル ストレージも変更されますか? それとも、スレッド ローカル ストレージはコンテキストの一部ではありませんか?

別の質問: TLS がsetcontext/によって変更される場合swapcontext、コンテキストをどのように変更しても、スレッドに固執するものはありますか? 一方、TLS がコンテキストに固執する場合、スレッドに固執し、setcontext/swapcontext によって変更されないものはありますか?

http://en.wikipedia.org/wiki/Fiber_(computer_science)によると、Windows プラットフォームにはスレッド ローカル ストレージとファイバー ローカル ストレージがあります。

4

1 に答える 1

2

スレッド ローカル ストレージが setcontext/swapcontext とどのように相互作用するかは明確に規定されていません。

Linux では、スレッド ローカル ストレージは setcontext/swapcontext の影響を受けず、一部のソフトウェアはその動作に依存しています - 詳細については、netbsd メーリング リストでの最近の議論を参照してください: pthreads に関する swapcontext()

また、C++ での TLS と並列処理の相互作用についての考えも関連しています: TLS_and_Parallelism.pdf

編集: makecontext/swapcontext は、しばらくの間廃止されているため、The Open Group Base Specifications Issue 7 から削除されたことも指摘する価値があります。代わりに、Boost.Contextが最近 Boost ライブラリに追加されました (ただし、ファイバーローカル ストレージもサポートしていません)。

于 2012-09-12T06:26:52.277 に答える