【发布时间】:2012-06-05 18:16:40
【问题描述】:
我正在使用多线程在 c++ 中的 linux 上进行串行 IO。目前我正在使用阻塞读取。这让我无法停止阻塞 read() 中的线程,除非强制终止或中断线程或使用诸如 pthread 取消之类的东西。现在在整个网络上,我看到人们对人们尖叫,建议他们需要从阻塞的 IO 中终止线程。通常它与内存泄漏有关。只要您正确清理,线程中断是否会出现一些神奇的内存泄漏?
try
{
while(true)
{
blocking_read(fd,buffer,512);
}
}catch(interrupt_exception)
{
}
//clean up, close fd, release heap memory, usual stuff
或者是我唯一的替代方案,如下所示,或者实现更高级别的协议,以确保阻塞读取接收到签名输入,使其能够自行关闭。
try
{
while(running)
{
nonblocking_read(fd,buffer,512);
if(cancel)
running = false; //break return etc
}
}
//clean up, close fd, release heap memory, usual stuff
同样,如果你中断线程导致它抛出异常,在 read() 中是否会发生一些神奇的内存泄漏。
或者我应该根本不在乎并让析构函数杀死线程(我假设当您删除持有线程的对象时线程终止)?并在那里清理?喜欢
class MyClass{
int fd;
Thread* myThread;
~MyClass(){
delete myThread;
close(fd);
}
};
感谢您的帮助!
【问题讨论】:
标签: c++ linux multithreading io