マルチスレッド Web プロキシを実装するための基本的なスケッチがあります。
FILE *proxy_log_file;
static void
SIGUSR1_handler(int sig)
{
(void)sig;
fflush(proxy_log_file);
}
int
main(int argc, char **argv)
{
proxy_log_file = fopen("proxy.log", "a");
Signal(SIGUSR1, SIGUSR1_handler);
}
kill
これは、ネットワーク管理者がコマンドを使用SIGUSR1
して Web プロキシに信号を送信することにより、バッファリングされたログ エントリをログ ファイルにフラッシュできるというものです。fflush
ただし、シグナル ハンドラ内で呼び出すのが良い考えかどうかはわかりません。スレッドセーフであることは知っfflush
ていますが、非同期シグナルセーフだとは思いません。fflush
マルチスレッドのシグナルハンドラ内で呼び出しを行うと、どのような並行性の問題が発生する可能性がありますか?