我正在使用多线程在 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);
}
};
谢谢你的帮助!