2011-08-11 12 views
14

Powiedzmy, że chcę zwiększyć licznik za każdym razem, gdy otrzymam odpowiedź ajax. Nie wiem o modelu współbieżności ze zdarzeniami asynchronicznymi JavaScript. Jakieś pomysły ?Jak uzyskać operacje atomowe (model współbieżności) w JavaScript?

+0

Zobacz komentarze [dotyczące odpowiedzi na inny temat] (http://stackoverflow.com/questions/6944748/is-there-an-ie-render-complete-event/6987573#6987573). Zasadniczo wszystkie skrypty są ustawione w kolejce do wykonania i nigdy nie ma dwóch skryptów działających w tym samym czasie. Jeśli skrypt jest uruchamiany, nowo uruchamiane skrypty (wyzwalane przez zdarzenia wywołane przez użytkownika lub żądania AJAX) są umieszczane w kolejce. Dlatego nie ma problemów z współbieżnością w JavaScript, ponieważ nie jest dostępna żadna współbieżność. –

+2

Co masz na myśli, mówiąc, że żadne dwa skrypty nie są wykonywane w tym samym czasie. Co dokładnie liczy się jako jednostka skryptu w twojej definicji? – smartnut007

+0

Domyślam się, co rozumie się przez "skrypt", musi być całą odpowiedzią, ze strony wszystkich załadowanych skryptów JavaScript, na dane zdarzenie. – Shavais

Odpowiedz

17

W przeglądarce działa tylko jeden wątek javascript na raz.

Problemy z współbieżnością są możliwe, ponieważ podczas gdy odpowiedź ajax jest w toku, javascript może działać w odpowiedzi na niepowiązane zdarzenie. Ale jesteś bezpieczny, jeśli nie rozpoczniesz operacji, która ma być atomowa przed wywołaniem ajax i zakończysz ją w procedurze obsługi odpowiedzi.

+1

Tak. Każde wydarzenie jest obsługiwane atomowo. – JGWeissman

Powiązane problemy