Powiel możliwe:
Are C# arrays thread safe?Wiele wątków z dostępem samej tablicy wielowymiarowej
I zostały programowania C# przez 10 miesięcy. Teraz uczę się wielowątkowości i wydaje mi się, że działa miło. Muszę wielowymiarowej tablicy wymiar jak
string[,] test = new string[5, 13];
mam nici wywoływanie metod, które kończą się zapisywanie ich wyjść różnych współrzędnych wewnątrz tablicy powyżej. bez żadnego wątku zapisującego do tej samej lokalizacji co inny wątek.
Więc thread1 może napisać do test[1,10]
ale żaden inny wątek nie będzie kiedykolwiek napisać do test[1,10]
Moje pytanie brzmi: czytałem o użyciu blokad na obiektach takich jak mojej tablicy, muszę się martwić w ogóle o zamkach mimo że moje wątki mogą mieć dostęp do tablicy testowej w tym samym czasie, ale nigdy nie zapisują do tych samych współrzędnych (położenie pamięci)?
Do tej pory nie miałem żadnych problemów z testowaniem, ale jeśli ktoś bardziej doświadczony niż ja wie, że mogę go wydać, zajrzę się blokadami użytkowania.
Nie, nie potrzebujesz zamków w wyjaśnianym scenariuszu. Ale zakładam, że czytasz dane w pewnym momencie? Czy czekasz, aż wszystkie wątki skończą się przed rozpoczęciem czytania? – Douglas
Jeśli nie używasz blokad, zaleca się wprowadzenie blokady pamięci (przez wywołanie 'Thread.MemoryBarrier()') przed rozpoczęciem czytania, aby upewnić się, że wszystkie wątki mają dostęp do "świeżych" danych. [Nonblocking Synchronization] (http://www.albahari.com/threading/part4.aspx) ma świetne wyjaśnienie na temat tej koncepcji. – Douglas
dzięki, wątki są tworzone z jednego głównego wątku, piszą tylko dane do tablicy, a gdy wszystko się skończy, RunWorkerCompleted poza głównym wątkiem, odczytuje tablicę. więc myślę, że jestem bezpieczny, dzięki za wyjaśnienie. –