同期のために POSIX セマフォ (初期値 = 1 のミューテックスとして使用) を使用するスレッドセーフ ライブラリを作成する必要があります。非同期信号を正しく管理するための問題がいくつか見つかりました。この静的ライブラリにリンクするアプリケーションがあり、アプリケーション (マルチスレッド) がライブラリの関数を呼び出します。一部の内部構造へのアクセスは、posix セマフォによって制御されます (ライブラリの内部です)。
void library_func1(lib_handler *h)
{
sem_wait(sem);
/* do some stuff with global data */
sem_post(sem);
}
void library_func2(lib_handler *h)
{
sem_wait(sem);
/* do some stuff with global data */
sem_post(sem);
}
void library_close(lib_handler *h)
{
...
}
SIGINT
1 つのスレッドがセマフォをロックしているときに非同期シグナル (たとえば ) が発生した場合、どのような追加が必要ですか? アプリケーションを再起動すると、セマフォが存在し、その値が であるため、デッドロックが発生します0
。非同期シグナルが発生したときにセマフォを解放できる機能がありますが、library_close
これを実行して確認する最良の方法はどれですか (その機能は、後に続く場合にのみシグナルセーフになると思いますexit
)? マルチスレッド アプリケーションでは、通常、すべてのシグナルに対して 1 つのスレッド マネージャーを使用することをお勧めします。
皆さん、ありがとうございました。