知っての通り、マネージスレッドは必ずしも Win32 スレッドではない。ホストが SQL Server の場合には「マネージスレッドはファイバだ」と言い切っている(※1)。マネージスレッドの正体がファイバだったら、どういった問題があるのだろうか?
TLS(スレッドローカルストレージ)の扱いが微妙になる。当然の事ながら、ファイバでは TLS は機能しない。しかし、マネージコードは巧くやっているのでマネージ TLS は使える。「スレッドセーフだと謳っているアンマネージコード」をマネージコードから使用する際には注意が必要だ。「スレッドセーフだと謳っている機能」がアンマネージ TLS に依っていてはアウトである。
セマフォやミューテックスなどの同期カーネルオブジェクトも微妙になる。「別のスレッドかと思いきや同じスレッドでした」という事になりかねない。同期もクソもないのである。これまた、マネージセマフォやマネージミューッテクスは巧くやってくれているのだろう。
P/Invoke、CCW を使えばアンマネージコードとの連携は簡単だよ、とは軽はずみには言えない。
※1 コード分析が言い切っている(相変わらず意味不明な訳だが)。但し、ファイバモードの場合だけだと思われる。参考 lightweight pooling オプション