跳到主要内容
CNode

多个进程同时写某个文件需要加锁吗?

问答
Hhisune发布于 10 年前最后回复 10 年前
1278320

test.js

const fs = require('fs');
var time = (new Date()).getTime();
var write = fs.createWriteStream(__dirname + '/log.log', {flags: 'a'});

for(var i = 0; i < 2000000; i++){
    write.write(time + "\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n");
}

同时执行: node test.js node test.js 2个进程在写,奇怪的是,要过十几秒后,ll查看log.log的大小才会不为0。 并且查看内容看起来并不需要加锁。为什么呢?真的不需要加锁吗?

是一次性写入了整行的内容所以不需要加锁?

查看回复

回复 (12)

H
hisune#1210 年前

@zhangzifa 多谢

Z
zhangzifa#1110 年前
引用 hisune@zhangzifa 对,如果行的内容足够长的情况也不想他被其他进程截断。但是为什么呢?大神能解释一下吗?

@hisune 最终调用的c函数已经做了保护了。linux/freeBSD下没问题,windows下不是很确定。

H
hisune#1010 年前

@zhangzifa 对,如果行的内容足够长的情况也不想他被其他进程截断。但是为什么呢?大神能解释一下吗?

Z
zhangzifa#910 年前

追加写没关系的,行不会被破坏,你的需求也就是行不会被其它进程截断吧 @hisune

H
hisune#810 年前

@yjhjstz time不一样啊,与内容无关啊,并且,如果有问题的话\n和\t还有time会在不正常的地方出现啊

Y
yjhjstz#710 年前

你这测试,2个进程写的东西都没有区分,怎么看结果当然一样了。 另外多进行写文件,是需要加锁的,追加写有时序问题的,也需要加锁。

谢谢 @all

H
hisune#610 年前

@LeslieYQ 能不能不要这么逼?逗

H
hisune#510 年前

@Neil-UWA 为啥?这个和writestream.write有什么区别或者好处吗?看了一下官方文档,好像并没有什么特殊说明

L
LeslieYQ#410 年前

一个程序员碰到了一个问题,他决定用多线程来解决。现在两个他问题了有

N
Neil-UWA#310 年前

用fs.appendFile

M
magicdawn#210 年前

不过这方面资料好像没有...

M
magicdawn#110 年前

要锁吧 ...

参与回复

登录后即可参与回复。登录