分类: LINUX
2012-02-04 21:22:18
++++++APUE读书笔记-12线程控制-10线程和输入输出++++++
10、线程和输入输出
================================================
在前面我们介绍了pread函数和pwrite函数,这些函数在多线程的环境中是非常有用的,因为进程中所有的线程共享同样的文件描述符号。
假设线程A和B在如下的情况同时读写文件:
线程A:lseek(fd, 300, SEEK_SET);read(fd, buf1, 100);
线程B:lseek(fd, 700, SEEK_SET);read(fd, buf2, 100);
如果线程A在调用完lseek之后,但是read之前的时候,线程B调用了lseek,那么两个线程将会读取同样的数据,显然这样的结果很可能就不是我们所需要的了。
为了解决上述问题,我们使用pread,这个函数将lseek和read合并为一个原子的操作:
线程A:pread(fd, buf1, 100, 300);
线程B:pread(fd, buf2, 100, 700);
使用线程A,我们就可以保证线程A从300开始读取,而线程B一定是从700开始读取。同理,我们可以使用pwrite来解决多个线程同时写同一个文件导致的竞争条件。
参考: