Załóżmy, że mam moduł z kolejką..NET - Czy wątek metody Queue.Enqueue jest bezpieczny?
przypadku innych podmiotów kolejkować, muszą przejść przez funkcję:
public sub InsertIntoQueue(Obj)
MyQueue.Enqueue(Obj)
end sub
Jeśli mam wiele wątków uruchomiony i chcą zadzwonić InsertIntoQueue(), jest to uważane wątek bezpieczne?
Mam wrażenie, że w pamięci jest tylko jedna kopia instrukcji potrzebnych do wykonania funkcji InsertIntoQueue() ... która mogłaby mnie przekonać, że jest to bezpieczne dla wątków.
Zastanawiam się jednak, co dzieje się, gdy dwa wątki próbują uruchomić funkcję w tym samym czasie?
Czy ten wątek jest bezpieczny, a jeśli nie, w jaki sposób mogę go zabezpieczyć? (i Jakie byłyby konsekwencje wydajności dotyczące prędkości i użycia pamięci)
Mój plan polegał na tym, że miałem wiele wątków, Enqueuing, i pojedynczy wątek blokujący i czyszczący całą kolejkę w określonych odstępach czasu. –
Jeśli zablokujesz podczas przetwarzania wszystkich obiektów w kolejce, wszystkie wątki, które będą się zaklinowywać, będą blokowane (jeśli spróbują się zakodować) do momentu, w którym zakończona zostanie poprawiona kolejka, może lepiej zablokować tylko puste sprawdzanie i usuwanie z kolejki obiekt, a nie całe przetwarzanie kolejki. – Matt