Can JavaScript function execution be interrupted?

javascript, jquery, multithreading, oop, thread-safety

Solution

JavaScript is single-threaded. A function cannot be interrupted, so you can be sure each function block will complete before another begins.

(However, if a function makes an asynchronous call, other functions may execute before the asynchronous operation starts. That doesn't happen in your code, though, that I can see, besides the `setTimeout` calls, and you can be sure those will execute in the correct order.)

Problem

Having an object to store data. ``` var store = { elements: [], eventsEnabled: true, addElement: function(element) { this.elements.push(element); if (this.eventsEnabled) { // Code that triggers event, calls handlers... whatever } } }; ``` The act of storing data comes from two events (kind of two producers). First "producer" does not trigger any event: ``` setInterval(function() { store.eventsEnabled = false; store.addElement('hello'); store.eventsEnabled = true; }, 12000); ``` Second does trigger events: ``` setInterval(function() { store.addElement('bye'); }, 7000); ``` The question is, can the second producer break execution flow of first producer? I mean, if producer 1 disables events and, before finishing execution (and therefore before events are enabled again), producer 2 starts its execution and adds its element, then no events will be triggered. Is that possible? Can that happen? If so, how can this code be converted to be kind-of thread-safe?

Original source

Related problems