Biorąc pod uwagę, że na ARM Cortex M3, mogę:ARM Cortex: mutex używając nieco banding
- atomowo czytać pojedynczy bit
- atomowo ustawić pojedynczy bit
- niepodzielnie usuwać pojedynczy bit
Jak mogę połączyć te dla mutex stylu zestawu operacji:
try lock
take lock
release lock
Wygląda na to, że try_lock
lub take_lock
wymagałoby dwóch operacji, które nie byłyby atomowe.
Czy potrzebuję większej kontroli, aby to osiągnąć? Wyłączenie globalnych przerwań byłoby to możliwe, ale wydaje się, że powinno być bardziej chirurgiczne podejście.
Jeśli dwie rzeczy próbują uzyskać dostęp do blokady, wydaje się, jakby oba dostępy mógł zgłosić awarię . Lepszym rozwiązaniem byłoby użycie spinloopa ldrex/strex. Jak już powiedziano, do jakiego stopnia dostępy bit-band gwarantują atomowość w obecności takich rzeczy jak DMA i takie? Jeśli zapis DMA i zapis bitmapowy występują mniej więcej jednocześnie, czy zapis DMA gwarantuje, że nie zachodzi pomiędzy aspektami "odczytu" i "zapisu" zapisu bitmapowego? – supercat