在一个多线程应用程序中,我需要取消一些线程。其中一些使用
flockfile
机制,但显然不是pthread_cancel
的有效取消点。我通过使用pthread_kill
发送SIGUSR1
信号来结束这些线程,在信号处理程序中强制它们执行pthread_exit
,从而成功地终止了它们。在我的情况下清理分配的内存很简单(都在堆栈上),但我当然无法关闭文件流。有没有办法释放缓冲区或删除锁定?在我的系统中,每个未关闭的缓冲区占用16KB的内存,这会很快积累。
ftrylockfile
函数。 - Karoly Horvathlockf
可以进行“重新设计”,但是... - Matftrylockfile
,但只有在线程尚未获取锁时才有用。有时它会在被锁定的通道中间捕捉到线程,这又是同样的问题。嗯,lockf
似乎是在进程级别上实现的? - Ynv