【发布时间】:2012-04-30 12:24:31
【问题描述】:
在多线程应用程序中,我需要取消线程。他们中的一些人使用flockfile
显然不是pthread_cancel 的有效取消点的机制。我设法通过使用pthread_kill 发送SIGUSR1 信号来杀死线程,迫使它们在信号处理程序中使用pthread_exit。在我的情况下,清理分配的内存被证明很简单(它都在堆栈上),但我当然不能关闭文件流。有没有办法释放缓冲区或删除锁?在我的系统上,每个未关闭的缓冲区都会占用 16KB 的内存,这些内存会迅速累积。
【问题讨论】:
-
这只是一种解决方法,但有
ftrylockfile。 -
好吧,
lockf进行了“重新设计”,但是... -
我试过
ftrylockfile但这只有在线程尚未获得锁时才有帮助。有时它会在锁定的通道中间卡住线程,再次出现同样的问题。嗯,lockf好像是在进程级别实现的? -
“在进程级别”是什么意思?在 linux 上,lockf 是通过 fcntl(F_SETLKW) 实现的。它不是在用户空间完成的,也不是进程私有锁。
标签: c multithreading stream buffer