簡體   English   中英

優雅地殺死 C 的 pthread 中的阻塞線程?

[英]Kill a blocking thread in C's pthread gracefully?

假設我有一個類似這樣的線程:

void my_thread(char *device_name) {
    int fd = open(device_name, O_RDONLY);
    struct input_event ev;

    while(1) {
        read(fd, &ev, sizeof(struct input_event));
        /* do something */
    }
}

如何停止這樣的線程? 一種方法是使用pthread_cancel ,但我寧願做得更優雅。 可能是pthread_kill之類的東西? 然而,在這種情況下,讀取方法是否會解除阻塞(我認為應該如此),線程將如何處理信號? 還是應該處理它的過程?

我將非常感謝您的建議!

對此的答案是不要做任何會在沒有超時的情況下阻塞的事情。 對於 IO,您不應該調用 read(),直到您知道調用不會阻塞。 例如,首先在路徑上使用 poll() 或 select() 以確定狀態。

您的問題實際上是“如何中斷來自其他線程的阻塞系統調用”。

嘗試搜索它。 這是類似的討論之一: 關閉阻塞 UDP 套接字的正確方法

你不能優雅地殺死一個線程。 如果要干凈退出,請確保線程基於某些條件退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM