У меня есть переменная volatile unsigned char array LedState[5]
, которая распределяется между потоками.Каждый индекс в массиве обозначает состояние.В соответствии с каждым состоянием светодиод будет мигать в различной последовательности.Один поток устанавливает состояние в массиве, а другой поток на основе индекса массива будет мигать светодиодами.
void TurnOnled(state) {
LedState[state] =1;
}
void TurnOffLed(state) {
LedState[state] = 0;
}
int CheckLedState(state) {
return LedState[state]? 1 : 0;
}
Thread 1
---------
TurnOnLed(3);
/*Set of instructions*/
TurnOffLed(3);
Thread 2
--------
if (CheckLedState(3)) {
/*Flash LEDS according to state*/
else {/*do nothing*/}
Проблема, с которой я иногда сталкиваюсь, в потоке 1, мне нужно TurnOnLed
и TurnOffLed
немедленно.Как я могу убедиться, что поток 2 видит TurnOnLed
до вызова TurnOffLed
.Выше приведен простой пример, но в действительности переменная LedState устанавливается и сбрасывается из более чем одного потока.Но разные потоки не устанавливают одно и то же состояние.