- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
TMutex CriticalGlobalRTOSMutex;
...
void CriticalDoing()
{
CriticalGlobalRTOSMutex.Lock();
...
if( !HorriblyDoing(...) )
{
throw FatalException;
};
...
CriticalGlobalRTOSMutex.UnLock();
};
...
Например, FatalException означает что все горит, и надо срочно включать систему пожаротушения. А мутекс разлочивать нельзя, потому как устройство, соответствующее ему, уже сгорело.
Это как бе намекает нам, что если выйти из программы, то страшный мьютекс никогда не освободится. Чем не контекст?
Или как вариант - в случае exception мутекс разлочивать ни в коем случае нельзя, его будет разлочивать обработчик исключений.
CriticalGlobalRTOSMutex.Lock();
return;
CriticalGlobalRTOSMutex.UnLock();