RTRTRT,在对一个变量进行操作的时候保证程序其他部分不能修改!
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,换句话说,所有的任务都是串行的,不会出现你所说的“其中一个用到改变标志量时,另一个改变”的情况
@leizongmin 还真就不知道了
单线程变量没关系,如果要用到文件锁,并且通过cluster.fork()启动了cpu个数量的子进程,这样文件应该有同时的情况