12 #ifndef HELPERS_THREADLOCK_INC_THREADLOCK_H_
13 #define HELPERS_THREADLOCK_INC_THREADLOCK_H_
41 #define TLock(lockObj) for(std::function<void(void)> func = nullptr; func == nullptr; (lockObj).DoLocked(func)) func = [&]()
65 #define TLockS(lockObj, ret) for(std::function<void(void)> func = nullptr; func == nullptr; (ret) = (lockObj).DoLocked(func)) func = [&]()
85 #define TLWhenUnlockedS(lockObj, ret) for(__magic_lock_raii rrrrr___(&(lockObj), (ret)); !rrrrr___.lck; rrrrr___.lck = true)
104 #define TLWhenUnlocked(lockObj) for(__magic_lock_raii rrrrr___(&(lockObj)); !rrrrr___.lck; rrrrr___.lck = true)
106 #define THREAD_LOCK_FUNC_BUFF_SIZE (5) //Size of function buffer (max count of interrupts when locked)
208 bool DoLocked(std::function<
void(
void)> func);
224 uint32_t UnlockPriv(uint32_t prim);
226 volatile bool lock:1;
227 volatile uint8_t funcBufferCnt:5;
228 std::function<void(
void)> funcBuffer [THREAD_LOCK_FUNC_BUFF_SIZE] = {
nullptr};
235 lck_stat = lockStatus = _lockObj->Lock();
241 lck_stat = _lockObj->Lock();
250 if(lck_stat) lockObj->Unlock();