Jeśli pojedyncza 32-bitowa zmienna jest współdzielona między wieloma wątkami, czy powinienem umieścić blokadę mutex wokół zmiennej? Załóżmy na przykład, że 1 wątek zapisuje do 32-bitowego licznika, a drugi wątek go odczytuje. Czy jest jakaś szansa, że drugi wątek mógł odczytać uszkodzoną wartość?Czy powinienem mutex zablokować pojedynczą zmienną?
Pracuję nad 32-bitowym systemem wbudowanym ARM. Kompilator zawsze wydaje się dopasowywać 32-bitowe zmienne, aby można je było odczytać lub zapisać za pomocą pojedynczej instrukcji. Jeśli 32-bitowa zmienna nie była wyrównana, to odczyt lub zapis byłby podzielony na wiele instrukcji, a drugi wątek mógłby odczytać uszkodzoną wartość.
Czy odpowiedź na to pytanie ulegnie zmianie, jeśli przejdę do systemu wielordzeniowego w przyszłości, a zmienna jest dzielona między rdzeniami? (zakładając wspólną pamięć podręczną między rdzeniami)
Dzięki!
Dbasz o wyścigi, czy martwisz się tylko łzawieniem? –
Gdy już się upewnisz, że nie ma łez, pamiętaj, aby nie pisać "i ++" lub "i + = j" bez muteksu. –
Dzięki za komentarz na temat łzawienia - nie wiedziałem, że tak się nazywało. Zastanawiam się głównie, co jest "standardem" i/lub czym jest "dobra praktyka", aby uniknąć zarówno łzawienia, jak i warunków wyścigu. – Will