首页 > 其他 > 详细

线程控制之线程和I/O

时间:2014-02-09 15:49:52      阅读:382      评论:0      收藏:0      [点我收藏+]

http://www.cnblogs.com/nufangrensheng/p/3498723.html中介绍了pread和pwrite函数,这些函数在多线程环境下是非常有帮助的,因为进程中的所有线程共享相同的文件描述符。

考虑两个线程,在同一时间对同一文件描述符进行读写操作。

bubuko.com,布布扣
线程A:
lseek(fd, 300, SEEK_SET);
read(fd, buf1, 100);

线程B:
lseek(fd, 700, SEEK_SET);
read(fd, buf2, 100);
bubuko.com,布布扣

如果线程A执行lseek,然后线程B在线程A调用read之前调用lseek,那么两个线程最终会读取同一条记录。很显然这不是我们希望的。

为了解决这个问题,可是使用pread,是偏移量的设定和数据的读取成为一个原子操作。

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

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

使用pread可以确保线程A读取偏移量为300的记录,而线程B读取偏移量为700的记录。可以使用pwrite来解决并发线程对同一文件进行写操作的问题。

本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

线程控制之线程和I/O

原文:http://www.cnblogs.com/nufangrensheng/p/3540805.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!