재진입 코드가 무엇을 의미하는지 정확히 이해하려고합니다. 이 코드는 다음과 같습니다.재진입 코드 혼란
void HWt::startElement(uint8_t HW, uint8_t val)
{
writeBitsToregister(REG_VAL + HW*131072, 0, 3, val); //Write bits 0-2
writeBitToregister(REG_VAL, 3, 1); //Set bit 3 to 1
writeBitToregister(REG_VAL, 3, 0); //Set bit 3 to 0
}
모든 비트 쓰기가 원자 적이어야합니다. 나는 이것이 재진입 적이라고 들었다. 내가 쓰레드를 안전하게 만드는 방법을 이해할 수있다. 뮤텍스 만 사용할 수있다.
재입 개가 안전하려면 어떻게해야하나요? 또한, 여기에 재진입 사실이 무엇을 의미하는지 이해할 수 없습니까? 같은 스레드가이 함수에 여러 번 액세스 할 수 있습니까? 이것이 ISR 또는 재귀 내에서 호출되는 경우에만 발생할 수 있습니까? 그것은이 두 가지 모두가 아닙니다.
다시 참가자는 다른 스레드에서 "자신의 데이터와"같은 함수를 호출하는 것이 안전하다는 것을 의미한다. 난 REG_VAL 상수, 그래서 당신이 mutliple 스레드에서 동일한 레지스터에 영향을 미치고 있기 때문에 다른 스레드에서 동시에이 함수를 호출 안전하다고 가정합니다. 이것은 재입국이 아닙니다. 물론 이것은 스레드로부터 안전하지 않습니다. – alediaferia
스레드 안전 부분은 분명합니다. 이해합니다. 그러나 이것이 왜 재진입이 아닌가? 이것은 동일한 스레드가이 코드에 액세스 할 수 없다는 것을 의미합니까? 즉 재귀 적으로 만들지 않거나 ISR에서 호출하지 마십시오. – user1876942
나는 첫 번째 문장에서 그것을 언급했다. 재진입은 "다른"스레드의 "동일한"인수로 함수를 동시에 호출하는 것이 안전하다는 것을 의미합니다. 예를 들어'int sum (int a, int b) {return a + b; }'재입국 중입니다. – alediaferia