2013-05-04 10 views
6

So che uno può sia splice un elemento fuori una matrice, sia eliminarlo con delete. Il primo approccio può causare problemi di concorrenza, ad es. se un thread sta camminando sopra l'array mentre un altro ha appena spostato o collegato. delete non presenta questo problema se forEach viene utilizzato nell'array, dal momento che forEach percorrerà i fori nell'array.Eliminazioni di array sicuri per i thread

Tuttavia, l'array non può continuare a crescere per sempre e richiederà lo sweep, causando potenzialmente lo stesso problema come nel caso di una giunzione. Sembra che abbia bisogno di essere bloccato, ma sarei divertito se Javascript avesse qualche possibilità per farlo. qualche idea?

+2

JavaScript non supporta thread, oltre a una funzionalità HTML5 recente (e che non consente la condivisione di matrici) – Dave

+1

Puoi mostrarci un esempio in cui due "thread" stanno tentando di accedere a una matrice nello stesso momento? Dovrebbe essere impossibile con JavaScript – Bergi

+0

@Bergi "dovrebbe"? –

risposta

5

No, non è possibile avere problemi di concorrenza poiché JavaScript non è multithread. Anche se usi i webworker non avrai problemi perché non vengono condivisi dati (i lavoratori comunicano passando messaggi). Anche in node.js lo script non è multi-thread.

Quindi utilizzare semplicemente splice, non è necessario bloccare l'array.

+0

Questo ha senso alla luce di 'libev' che usa node.js. Avrei dovuto cercarlo un po 'di più prima di chiedere questo! Grazie. – dmkc

+0

Con ECMA6, JavaScript è asincrono con l'aiuto di Promises. Ora possiamo creare funzioni asincrone. Quindi non pensi che potremmo aver bisogno di un lucchetto? –

+0

@JayShah ci sono alcuni casi in cui è possibile avere esecuzioni interlacciate grazie ad async/await ma non durante l'esecuzione di un'istruzione di splicing. Se qualche blocco di codice non sta effettuando chiamate asincrone, non verrà interrotto e nessun altro codice utente verrà eseguito contemporaneamente. –

1

Javascript è singlethreaded quindi non ci sono problemi.

Problemi correlati