【发布时间】:2018-09-18 21:40:40
【问题描述】:
如果一个中断/线程在read(fd,buff,size) 或write(fd,buff,size) 函数的执行过程中抢占然后返回到它在read()/write() 中的位置会发生什么?
我们可以假设它将继续读取或写入文件描述符而不会丢失数据和顺序吗?
假设没有共享变量需要担心同步。
【问题讨论】:
标签: c linux unix operating-system
如果一个中断/线程在read(fd,buff,size) 或write(fd,buff,size) 函数的执行过程中抢占然后返回到它在read()/write() 中的位置会发生什么?
我们可以假设它将继续读取或写入文件描述符而不会丢失数据和顺序吗?
假设没有共享变量需要担心同步。
【问题讨论】:
标签: c linux unix operating-system
read 和 write 是系统调用,因此从用户空间的角度来看,它们是“原子的”——中断或线程无法在执行的“中间”抢占它们.任何信号都将在系统调用完成后传递——如果它是一个中断信号,它可能会导致“短”读取或写入(读取或写入的字节数比预期的少)或EINTR 错误值,在这种情况下用户级程序(在中断和系统调用后恢复时)将需要处理。
【讨论】: