Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5513933
  • 博文数量: 922
  • 博客积分: 19333
  • 博客等级: 上将
  • 技术积分: 11226
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 14:33
文章分类

全部博文(922)

文章存档

2023年(1)

2020年(2)

2019年(1)

2017年(1)

2016年(3)

2015年(10)

2014年(17)

2013年(49)

2012年(291)

2011年(266)

2010年(95)

2009年(54)

2008年(132)

分类: 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来解决多个线程同时写同一个文件导致的竞争条件。

参考:

 

 

阅读(724) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~