如何实现多线程下的文件锁?

爱若一生 2012-12-11 11:06:45
我试过flock(),这个函数只是用于控制进程间的文件锁,在同一个进程下的多个线程是无效的哦。
我现在就想在同一个进程下多个线程中进行枷锁,防止另外一个线程执行写操作,该怎么办?有什么函数或者方法没?
...全文
283 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdl19881 2012-12-11
  • 打赏
  • 举报
回复
其实不需要用锁呀 1.先得到文件有多大,然后创建一个此大小的下载文件, 2.将文件映射内存的方式. open,mmap, 3.计算好每个线程下载片段的偏移量与大小.只操作自己对应线程的内存地方.(每个线程下载的片段又不会重合,所以也就不需要锁的.)
fdl19881 2012-12-11
  • 打赏
  • 举报
回复
引用 2 楼 cwj649956781 的回复:
引用 1 楼 fdl19881 的回复:其实不需要用锁呀 1.先得到文件有多大,然后创建一个此大小的下载文件, 2.将文件映射内存的方式. open,mmap, 3.计算好每个线程下载片段的偏移量与大小.只操作自己对应线程的内存地方.(每个线程下载的片段又不会重合,所以也就不需要锁的.) nb
文件太大的话,比如上GB,那就根据此时各个线程下载片段的位置,分段映射,不用全部映射整个下载文件.
烂番 2012-12-11
  • 打赏
  • 举报
回复
fcntl 进程间也是可以用的
爱若一生 2012-12-11
  • 打赏
  • 举报
回复
引用 1 楼 fdl19881 的回复:
其实不需要用锁呀 1.先得到文件有多大,然后创建一个此大小的下载文件, 2.将文件映射内存的方式. open,mmap, 3.计算好每个线程下载片段的偏移量与大小.只操作自己对应线程的内存地方.(每个线程下载的片段又不会重合,所以也就不需要锁的.)
nb

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧