3

マルチ スレッド アプリケーションでは、すべてのスレッドがすべてのシグナルをブロックし、1 つのスレッドが を使用してループ内でシグナル処理を行いsigwaitます。他のスレッドでのようEINTRなシステムコールを使用した後、検討する必要がありますか?readwrite

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

1 に答える 1

3

EINTRシステムコールがシグナルハンドラによって中断された場合にのみ返されます。システム コールを実行しているスレッドのシグナル マスクですべてのシグナルがブロックされている場合、これは発生しません。

于 2012-08-15T06:40:34.837 に答える