Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1417723
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类:

2012-04-01 15:00:56

我们在3.11节介绍了pread和pwrite。这些函数有助于多线程环境,因为进程里的所有线程共享相同的文件描述符。


考虑两个线程同时读或写一个相同的文件。


线程A:
lseek(fd, 300, SEEK_SET);
read(fd, buf1, 100);


线程B:
lseek(fd, 700, SEEK_SET);
read(fd, buf2, 100);


如果线程A执行lseek然后线程B在线程A调用read前调用lseek,那么两个线程最终都读到相同的记录。很明显,这不是我们想要的。


为了解决这个问题,我们可以使用pthread来让偏移量的设置和数据的读成为一个原子操作。


线程A:pread(fd, buf1, 100, 300);


线程B:pread(fd, buf2, 100, 700);


使用pread,我们可以确保线程A读取偏移量300的数据而线程B读取偏移量为700的数据。我们可以使用pwrite来解决并发线程写相同文件的问题。

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