2012-08-15 37 views
3

在一個多線程應用程序中,所有線程都會阻塞所有信號,並且一個線程會以sigwait的循環執行信號處理。現在我們應該在其他線程使用系統調用如readwrite後考慮EINTR使用sigwait時我們應該關心EINTR嗎?

while (true) 
{ 
    num = read(fd, buf, size); 
    if (num == -1 && errno == EINTR) 
     continue; 
    else if (num > 0) 
     /* handle the buf and read more */ 
} 

回答

3

EINTR僅當系統調用被信號處理程序中斷時才返回。如果在系統調用的線程的信號掩碼中所有信號都被阻塞,則不會發生這種情況。

+0

另請參閱此評論:http://stackoverflow.com/questions/4959524/when-to-check-for-eintr-and-repeat-the-function-call#comment46931524_4960077 – 2016-02-15 14:33:32

相關問題