我在Linux上做串行IO在C++中。目前我正在使用阻止閱讀。這使我無法在阻塞read()中停止線程cought,除非強制終止或中斷線程或使用類似pthread取消的東西。現在遍佈網絡,我看到人們尖叫着建議他們需要終止來自阻塞IO的線程。通常它涉及的內存泄漏。是否有一些魔術內存泄漏可以在線程中斷時出現,只要您正確清理?終止使用多線程阻塞IO在Linux中C++
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);
}
};
感謝您的幫助!
非常實用且有用的答案。我已經在我曾工作的一個路由器相關項目中看到了這個答案的應用。感謝您提供了很多選擇 – achoora