免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: camelli
打印 上一主题 下一主题

多次打开同一个文件问题! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-05-13 00:02 |只看该作者
原帖由 hkwang66 于 2006-5-12 23:29 发表

写时也不用加锁,加锁目的是什么呢?另外一个进程打开文件是读数据不会破坏数据。
读文件的进程可以一直循环读取,即使到了文件尾部也不要退出,下次写进程再次写入数据时读进程又能读到数据,这是应为文件的大 ...

写时当然要锁,又不是只有一个进程写日志

论坛徽章:
0
12 [报告]
发表于 2006-05-13 01:45 |只看该作者
原帖由 soul_of_moon 于 2006-5-13 00:02 发表

写时当然要锁,又不是只有一个进程写日志

即使多个进程同时写,如果写进程以append形式打开然后再写又有什么问题呢?
一次写操作是一个原子操作不可能写一半被中断,为什么要上锁呢?
LZ太谨慎了。

论坛徽章:
0
13 [报告]
发表于 2006-05-15 14:03 |只看该作者
呵呵,受教受教,谢谢!不过多媒体播放软件好像没有借口提供暂停、恢复功能,晕死了!不知道怎么办了!可不可以这样呢:发送一个信号(什么信号?)给多媒体播放进程,让它挂起,然后执行完别的进程以后再恢复多媒体播放?请指教,

论坛徽章:
0
14 [报告]
发表于 2006-05-15 21:53 |只看该作者
原帖由 camelli 于 2006-5-15 14:03 发表
呵呵,受教受教,谢谢!不过多媒体播放软件好像没有借口提供暂停、恢复功能,晕死了!不知道怎么办了!可不可以这样呢:发送一个信号(什么信号?)给多媒体播放进程,让它挂起,然后执行完别的进程以后再恢复多媒 ...

如果媒体播放程序不是你写的或者没有什么对外接口等,可能你没有办法让他暂停或播放,比如发一个信号给他,如果多媒体进程实现时就屏蔽这些信号呢?

论坛徽章:
0
15 [报告]
发表于 2006-05-16 14:23 |只看该作者
原帖由 hkwang66 于 2006-5-13 01:45 发表

即使多个进程同时写,如果写进程以append形式打开然后再写又有什么问题呢?
一次写操作是一个原子操作不可能写一半被中断,为什么要上锁呢?
LZ太谨慎了。


从哪里看到的一次写操作是一个原子操作?
即使是非缓冲的也不能保证是线程安全的吧.

论坛徽章:
0
16 [报告]
发表于 2006-05-16 15:17 |只看该作者
原帖由 unicorns 于 2006-5-16 14:23 发表


从哪里看到的一次写操作是一个原子操作?

我认为:
hkwang66的意思是:当你用O_APPEND的方式打开一文件的时候"定位到文件末尾然后写"是一个原子操作!
但是我觉得还是需要加锁的,当一个进程用O_APPEND向日志文件写一条记录的时候,很有可能没有写完进程
被挂起,另一进程继续写,这样导致日志信息的混乱!所以应该加锁!
如有不对,请多指教!

[ 本帖最后由 hubenhua1998 于 2006-5-16 15:28 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2006-05-16 16:40 |只看该作者
不加锁的话
有可能你下次打开这个文件时候看见的文件内容都是空的

论坛徽章:
0
18 [报告]
发表于 2006-05-16 17:59 |只看该作者
读者与写者问题。。。

论坛徽章:
0
19 [报告]
发表于 2006-05-17 00:05 |只看该作者
原帖由 unicorns 于 2006-5-16 14:23 发表


从哪里看到的一次写操作是一个原子操作?
即使是非缓冲的也不能保证是线程安全的吧.

请参见:
http://smth.edu.cn/bbsanc.php?pa ... am%2FaboutWriteAtom

写管道不是,可能会被阻塞。

论坛徽章:
0
20 [报告]
发表于 2006-05-17 00:34 |只看该作者
管道特殊的原因是他有读端和写端,如果是命名管道,他是一个特殊的文件,使用文件索引的直接块;也就是说管道有“大小”比如管道还“剩余”1K,你写1.5K时内核写入1K但是写并不返回,内核使写进程睡眠,直到获得更多的空间(读进程读出数据);管道有剩余空间后唤醒所有写阻塞的进程,如果另外的进程在这个写进程之前被调度(如优先级比其高)先往管道中写,那个写进程再写0.5K,这时可以看到那个写进程写的1.5K数据被“打断”。
无名管道有缓冲大小,其写也可能和出现和命名管道类似情况。

[ 本帖最后由 hkwang66 于 2006-5-17 01:01 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP