我有一个实现多线程 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);
}
这个想法是网络管理员可以通过使用命令向Web 代理kill
发送信号来将缓冲的日志条目刷新到日志文件。SIGUSR1
但是,我不确定fflush
在信号处理程序内部调用是否是个好主意。我知道fflush
是线程安全的,但不认为它是异步信号安全的。fflush
在多线程的信号处理程序内部调用可能会出现什么并发问题?