Ste*_*Dan 8 c multithreading posix signals
我有一个多线程服务器(使用POSIX线程),每个持久连接有一个线程.在其中一个线程中,连接的另一端关闭,导致交付SIGPIPE.是否有一个(最好是可移植的)确定发生了哪个线程(以及哪个连接)因此我可以让我的信号处理程序执行线程/连接清理工作本身或设置一个标志,以便主线程和工作线程分别看到他们需要以后再做吗?
编辑:我想知道我是否可以使用&errno,将其存储在全局数组中并将其与服务器的线程标识符关联,然后在信号处理程序中搜索&errno.线程的特定错误是否对信号处理程序可见?我是否理解线程安全errno即使在球场中如何工作?
Jer*_*ner 12
我不这么认为,不.对多线程服务器更好的解决方案是抑制SIGPIPE信号(通过调用signal(SIGPIPE, SIG_IGN)作为程序启动例程的一部分),然后让线程处理由返回的错误值(-1/EPIPE)send().
信号和多线程不能很好地混合.