2013-05-04 10 views
6

Wiem, że można albo splice element z tablicy, albo usunąć go z delete. To pierwsze podejście może powodować problemy z współbieżnością, np. jeśli jeden wątek przechodzi przez macierz, podczas gdy inny właśnie się przesunie lub splicuje. delete nie ma tego problemu, jeśli w macierzy używane jest forEach, ponieważ forEach przejdzie przez otwory w tablicy.Usuwanie wątków bezpiecznych

Jednak tablica nie może rosnąć wiecznie i będzie wymagać zamiatania, potencjalnie powodując taki sam problem jak w przypadku splotu. Wygląda na to, że potrzebuję blokady, ale byłbym rozbawiony, gdyby JavaScript miał do tego odpowiednie udogodnienia. jakieś pomysły?

+2

JavaScript nie obsługuje wątków innych niż ostatnia funkcja HTML5 (i która nie pozwala na współdzielenie tablic). – Dave

+1

Czy możesz pokazać nam przykład, w którym dwa "wątki" próbują uzyskać dostęp do tablicy w tym samym czasie? To powinno być niemożliwe przy JavaScript – Bergi

+0

@Bergi "powinien"? –

Odpowiedz

5

Nie, nie można mieć problemu z współbieżnością, ponieważ JavaScript nie jest wielowątkowy. Nawet jeśli korzystasz z webworkerów, nie będziesz miał problemów, ponieważ żadne dane nie są współużytkowane (pracownicy komunikują się za pomocą przekazywanych wiadomości). Nawet w pliku node.js twój skrypt nie jest wielowątkowy.

Po prostu użyj splice, nie ma potrzeby blokowania tablicy.

+0

Ma to sens w świetle 'libev' używanego przez node.js. Powinienem zbadać to nieco dłużej, zanim o to zapytam! Dzięki. – dmkc

+0

W ECMA6 JavaScript jest asynchroniczny dzięki pomocy przyrzeczeń. Możemy teraz tworzyć funkcje asynchroniczne. Więc nie sądzisz, że potrzebujemy blokady? –

+0

@JayShah Istnieją pewne przypadki, w których można było przeplatać egzekucje dzięki async/waiting, ale nie podczas wykonywania instrukcji splice. Jeśli jakiś blok kodu nie wykonuje asynchronicznych wywołań, nie zostanie on przerwany i żaden inny kod użytkownika nie zostanie wykonany w tym samym czasie. –

1

Javascript jest singlethreaded, więc nie ma problemu.

Powiązane problemy