[英]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.