【发布时间】:2016-04-30 19:14:57
【问题描述】:
我有一个实现多线程网络代理的基本草图:
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 信号将缓冲的日志条目刷新到日志文件。但是,我不确定在信号处理程序中调用 fflush 是否是个好主意。我知道fflush 是线程安全的,但不认为它是异步信号安全的。在多线程的信号处理程序中调用fflush 会出现什么并发问题?
【问题讨论】:
标签: c multithreading fflush