1

extern次のような C APIが必要になることがよくあります。

set_module_callback(module, some_func, func_args);

しかし、スレッドセーフmoduleである必要がありsome_funcます。つまり、この関数を呼び出すスレッドが複数ある可能性がありますが、スレッドセーフであるかどうかはわかりません。呼び出し中にそれをテストする方法はありますか?set_module_callback

4

3 に答える 3

2

スレッドセーフは非常に複雑な領域です。十分に保護されたコードであっても、別のコードとの通信に穴が開いている可能性があります。そのため、それsome_funcは安全ではないと想定し、(たとえば) 共有リソースに関するクリティカル セクションを提供する方がよいでしょう。だから答えは「いいえ」です

于 2013-03-27T08:19:55.087 に答える
0

アプリケーションが POSIX の場合は、同時アクセス検出を行うHelgrind ツールを試すことができます。

ただし、ソフトウェアが API を呼び出す方法に基づいています。そのため、API がスレッド セーフであるかどうかに関係なく、絶対的な一般的な答えは得られません。特定のアプリケーションが与えられた場合にのみ、この答えが得られます。

于 2013-03-27T08:53:13.687 に答える
0

一部のコードで別のコードを自動的にテストする方法はありません。

ti がスレッドセーフであることを本当に確認するには、ti を調べて、その機能と副作用が発生する可能性がある場所を分析し、必要に応じてミューテックスを追加する必要があります。

于 2013-03-27T08:17:00.100 に答える