TaskManagerIO
Loading...
Searching...
No Matches
SimpleSpinLock.h
1/*
2 * Copyright (c) 2018 https://www.thecoderscorner.com (Dave Cherry)..
3 * This product is licensed under an Apache license, see the LICENSE file in the top-level directory.
4 */
5
6#ifndef TASKMANAGERIO_RENTRANTYIELDINGLOCK_H
7#define TASKMANAGERIO_RENTRANTYIELDINGLOCK_H
8
9#include "TaskManagerIO.h"
10
18private:
19 tm_internal::TimerTaskAtomicPtr initiatingTask;
20#if defined(IOA_MULTITHREADED)
21 volatile void* currentThread = nullptr;
22#endif
23 tm_internal::TmAtomicBool locked;
24 volatile uint8_t count;
25public:
30 initiatingTask = nullptr;
31 locked = false;
32 count = 0;
33 }
34
38 void lock() {
39 spinLock(0xFFFFFFFFUL);
40 }
41
46 bool tryLock();
47
53 bool spinLock(unsigned long iterations);
54
58 void unlock();
59
60 uint8_t getLockCount() const { return count; }
61
62 bool isLocked() const { return locked; }
63};
64
79class TaskMgrLock {
80private:
81 SimpleSpinLock& lock;
82
83public:
84 TaskMgrLock(SimpleSpinLock& theLock) : lock(theLock) {
85 lock.lock();
86 }
87
88 ~TaskMgrLock() {
89 lock.unlock();
90 }
91};
92
93#endif //TASKMANAGERIO_RENTRANTYIELDINGLOCK_H
Task manager is a simple co-routine style implementation for Arduino which supports scheduling work t...
Definition SimpleSpinLock.h:17
bool spinLock(unsigned long iterations)
Definition SimpleSpinLock.cpp:18
void unlock()
Definition SimpleSpinLock.cpp:43
void lock()
Definition SimpleSpinLock.h:38
SimpleSpinLock()
Definition SimpleSpinLock.h:29
bool tryLock()
Definition SimpleSpinLock.cpp:8