有一个对象来存储数据。
var store = {
elements: [],
eventsEnabled: true,
addElement: function(element) {
this.elements.push(element);
if (this.eventsEnabled) {
// Code that triggers event, calls handlers... whatever
}
}
};
存储数据的行为来自两个事件(两种生产者)。第一个“生产者”不会触发任何事件:
setInterval(function() {
store.eventsEnabled = false;
store.addElement('hello');
store.eventsEnabled = true;
}, 12000);
第二个确实触发事件:
setInterval(function() {
store.addElement('bye');
}, 7000);
问题是,第二个生产者能否打破第一个生产者的执行流程?
我的意思是,如果生产者 1 禁用事件,并且在完成执行之前(因此在再次启用事件之前),生产者 2 开始执行并添加其元素,则不会触发任何事件。那可能吗?这会发生吗?
如果是这样,如何将此代码转换为某种线程安全的?