Skip to content

处理sem_timedwait()返回的EINTR错误 #26

@c0per

Description

@c0per

现在的代码在sem_timedwait()返回时,会:

  • success
  • time out
  • 根据errno进行throw

sem_timedwait()函数会syscall被singal处理打断时,会返回EINTR错误,并不代表出现了问题,只是交由用户判断是否继续wait。
现在的版本在遇到EINTR时会当作错误处理,造成如下效果:
image

详情请见:
https://linux.die.net/man/3/sem_timedwait
https://stackoverflow.com/a/52332012

较为合适的做法是:

while ((s = sem_timedwait(&sem, &ts)) == -1 && errno == EINTR)
    continue;       /* Restart if interrupted by handler */

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions