nodejs中有类似变量锁的东西么!!
发布于 12 年前 作者 talentfs 16113 次浏览 最后一次编辑是 8 年前

RTRTRT,在对一个变量进行操作的时候保证程序其他部分不能修改!

12 回复

node中都是单线程的,要锁干神马?

单线程这个point很重要。感觉很多编程手法都因此而变了。

你问的是这个吗? http://cnodejs.org/topic/50b78af1637ffa41552a1be1

var obj = { greeting : "Hi!" };
Object.freeze(obj);
Object.isFrozen(obj); // true

是这样,我建立了一个socket连接,当有sock.on(‘data’, function(data) {…})时,我先把数据保存到内存,同时在这个连接内,还有一个定时器,一定时间将接受到的数据保存到数据库;sock.on()和setInterval(save, 30000);同时会用到一个标志量,我需要保证在sock.on()和setInterval其中一个用到改变标志量时,另一个不能改变~~

是这样,我建立了一个socket连接,当有sock.on(‘data’, function(data) {…})时,我先把数据保存到内存,同时在这个连接内,还有一个定时器,一定时间将接受到的数据保存到数据库;sock.on()和setInterval(save, 30000);同时会用到一个标志量,我需要保证在sock.on()和setInterval其中一个用到改变标志量时,另一个不能改变~~

@a272121742 用Object.freeze()锁定对象后,突然又想修改这个对象,咋解锁啊?

都说了,是单线程的,没有“同时”修改的情况!

@talentfs sock.on 跟setInterval 都用到这个标志量,问题是有没有可能"同时会用到一个标志量"? 如果考虑到单线程的特性,好像不大可能“同时用到”

@talentfs 注意node的单线程特点,在sock.on和setInterval 执行的时候,并不会再触发其他的sock.on和setInterval,换句话说,所有的任务都是串行的,不会出现你所说的“其中一个用到改变标志量时,另一个改变”的情况

单线程变量没关系,如果要用到文件锁,并且通过cluster.fork()启动了cpu个数量的子进程,这样文件应该有同时的情况

回到顶部