当前位置: 技术问答>linux和unix
Linux下多线程写入同一个文件
来源: 互联网 发布时间:2016-11-07
本文导语: 用Linux底层文件API操作(不带buffer) 其实就是自己写个简单的数据库,把数据库保存在文件中。 为了提高写入性能,考虑用多线程,请有经验的大虾指点指点! 参考文章: (呵,权当收藏) 如何实现多进程写一个...
用Linux底层文件API操作(不带buffer)
其实就是自己写个简单的数据库,把数据库保存在文件中。
为了提高写入性能,考虑用多线程,请有经验的大虾指点指点!
参考文章:
(呵,权当收藏)
如何实现多进程写一个文件
http://student.csdn.net/space.php?uid=45153&do=blog&id=38908
多线程同步写入同一个文件的问题
http://linux.chinaunix.net/bbs/viewthread.php?tid=1022320
多线程写同一个文件
http://www.oschina.net/bbs/thread/14537?p=1
linux多线程设计
http://baike.baidu.com/view/400319.htm
现在还没动手,还在思考阶段:
1.看上去在写入的时候一定要加锁,因为设计记录是定长的,如果指定线程从文件指定位置开始写入是不是可以不用加锁了?
2.如果加锁,写入速度会不会更慢?因为是数据库日志文件,用了O_DIRECT参数本来就已经很慢了
其实就是自己写个简单的数据库,把数据库保存在文件中。
为了提高写入性能,考虑用多线程,请有经验的大虾指点指点!
参考文章:
(呵,权当收藏)
如何实现多进程写一个文件
http://student.csdn.net/space.php?uid=45153&do=blog&id=38908
多线程同步写入同一个文件的问题
http://linux.chinaunix.net/bbs/viewthread.php?tid=1022320
多线程写同一个文件
http://www.oschina.net/bbs/thread/14537?p=1
linux多线程设计
http://baike.baidu.com/view/400319.htm
现在还没动手,还在思考阶段:
1.看上去在写入的时候一定要加锁,因为设计记录是定长的,如果指定线程从文件指定位置开始写入是不是可以不用加锁了?
2.如果加锁,写入速度会不会更慢?因为是数据库日志文件,用了O_DIRECT参数本来就已经很慢了
|
如果每个线程从不同的起点写入,感觉可以不用加锁
但是读的时候只怕要加锁,否则就是脏读
可以考虑使用读写锁
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
但是读的时候只怕要加锁,否则就是脏读
可以考虑使用读写锁
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
|
加锁肯定会影响效率
|
可以考虑单独一个线程负责写文件,其他线程都是跟这个线程交互数据就行了,只需要很小量的锁