PREAD; 线程安全与否?

dan*_*rth 6 c multithreading posix

在同一时间从2个或更多不同线程对同一个文件描述符使用pread是否有问题?

aaz*_*aaz 8

pread本身是线程安全的,因为它不在不安全的函数列表中.所以打电话是安全的.

真正的问题是:如果您同时从同一个文件中读取(不一定来自两个线程,而且来自两个进程)会发生什么.

对此,规范说:

  • 未指定同一管道,FIFO或终端设备上的多个并发读取的行为.

    请注意,它没有提到普通文件.这个位只涉及到read任何方式,因为pread不能用于不可见的文件.

  • I/O旨在成为普通文件和管道以及FIFO的原子.

    但这来自非规范部分,因此您的操作系统可能会采用不同的方式.例如,如果您从两个线程读取并且存在并发写入,则可能会在两个读取缓冲区中获得不同的写入部分.但是这种问题并不是多线程所特有的.

也很高兴知道在某些情况下

read()将阻塞调用线程

不是流程,只是线程.和

已阻塞的线程不得阻止任何未阻塞的线程最终进行前进