私はレガシーC/C ++コードのコードベースを持っています。これには、グローバル静的変数にアクセスする多くの関数が含まれているため、スレッドセーフではありません。このコードをスレッドセーフにする方法についてのアドバイスを探しています。そのための1つの方法は、静的変数をスレッドローカル変数に変換するか、スレッドローカルストレージに格納することです。これには、関数を使用して追加のコンテキストを渡すコードをたくさん書き直す必要がなく、スレッドセーフでない関数自体だけを書き直す必要がないという利点があります。しかし、これを調査したところ、これが良いアイデアか悪いアイデアかについてのアドバイスはあまり見つかりませんでした。私が持っているいくつかの特定の懸念は
- TLSベースのデータへのアクセスは大幅に遅くなりますか?
- am I just continuing to fall into the trap of using global variables, since "global variables are bad", or does TLS counteract the global-variables-are-bad argument?
Any other thoughts would be appreciated too.