extern
次のような C APIが必要になることがよくあります。
set_module_callback(module, some_func, func_args);
しかし、スレッドセーフmodule
である必要がありsome_func
ます。つまり、この関数を呼び出すスレッドが複数ある可能性がありますが、スレッドセーフであるかどうかはわかりません。呼び出し中にそれをテストする方法はありますか?set_module_callback
extern
次のような C APIが必要になることがよくあります。
set_module_callback(module, some_func, func_args);
しかし、スレッドセーフmodule
である必要がありsome_func
ます。つまり、この関数を呼び出すスレッドが複数ある可能性がありますが、スレッドセーフであるかどうかはわかりません。呼び出し中にそれをテストする方法はありますか?set_module_callback
スレッドセーフは非常に複雑な領域です。十分に保護されたコードであっても、別のコードとの通信に穴が開いている可能性があります。そのため、それsome_func
は安全ではないと想定し、(たとえば) 共有リソースに関するクリティカル セクションを提供する方がよいでしょう。だから答えは「いいえ」です
アプリケーションが POSIX の場合は、同時アクセス検出を行うHelgrind ツールを試すことができます。
ただし、ソフトウェアが API を呼び出す方法に基づいています。そのため、API がスレッド セーフであるかどうかに関係なく、絶対的な一般的な答えは得られません。特定のアプリケーションが与えられた場合にのみ、この答えが得られます。
一部のコードで別のコードを自動的にテストする方法はありません。
ti がスレッドセーフであることを本当に確認するには、ti を調べて、その機能と副作用が発生する可能性がある場所を分析し、必要に応じてミューテックスを追加する必要があります。