【发布时间】:2012-01-07 04:10:42
【问题描述】:
是的,我知道在 Javascript 中要求一个正式的内存模型是一项无望的工作,所以我正在接受“所有浏览器都遵循这些规则”之类的东西。
我的问题如下:我必须以定义的时间间隔将事件发送到服务器,但这样做时可能会将事件添加到我的数组中,即:
function storeEvent(event) {
// may be called at any time
storedEvents.push(event);
}
function broadcastEvents() {
if (storedEvents.length !== 0) {
var eventString = JSON.stringify(storedEvents);
storedEvents = [];
// send eventString to server
}
window.setTimeout(broadcastEvents, BROADCAST_TIMER);
}
那里有一个明显的竞争条件,甚至没有想到缺少的内存屏障。
怎么办?这里真的缺少Java内存模型..
【问题讨论】:
-
请参阅this post,了解有关 javascript 事件队列如何工作以及为什么这不是竞争条件的简要说明。
-
@jfriend00 谢谢 - 所以它基本上是通常的消息泵实现,无需重入。很高兴知道,即使除了“它是单线程的”之外无关紧要:)
-
是的,这是一个很好的描述方式。
标签: javascript memory shared-memory