Manipulação de threads e condições de corrida em Javascript
Vamos supor que eu tenho um código como o seguinte:
var shared = 100;
function workWithIt(){
shared += 100;
}
setTimeout(workWithIt, 500);
setTimeout(workWithIt, 500);
Idealmente, esse trecho de código deve adicionar 200 à variávelshared
, que é 300 depois.
Mas, como eu sei dec
, pode haver algumas implicações, se a operação + = for dividida em vários comandos.
Digamos que esta é a ordem de execução da função:
setTimeout() --> create Thread A
setTimeout() --> create Thread B
wait 500ms
**Thread A** | **Thread B**
--------------------------------+---------------------------------
var tmpA = shared; //100 |
| var tmpB = shared; //100
| tmpB = tmpB+100; //tmpB=200
| shared = tmpB;
tmpA = tmpA+100; //tmpA=200 |
shared = tmpA; |
Nesse caso,shared
agora tem o valor 200.
Isso pode acontecer em muitas linguagens de programação como c, c ++, java, c #, ... - mas também pode acontecer em Javascript?
Ou, de maneira mais geral: como o Javascript lida com seus threads, quando ele alterna entre threads e existem métodos internos que podem ser usados para lidar com as condições de corrida?