Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1744774
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-31 23:25:24

我们在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来解决并发线程写相同文件的问题。

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