TaskManagerIO
Toggle main menu visibility
Loading...
Searching...
No Matches
src
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
17
class
SimpleSpinLock
{
18
private
:
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;
25
public
:
29
SimpleSpinLock
() {
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
79
class
TaskMgrLock {
80
private
:
81
SimpleSpinLock
& lock;
82
83
public
:
84
TaskMgrLock(
SimpleSpinLock
& theLock) : lock(theLock) {
85
lock.lock();
86
}
87
88
~TaskMgrLock() {
89
lock.unlock();
90
}
91
};
92
93
#endif
//TASKMANAGERIO_RENTRANTYIELDINGLOCK_H
TaskManagerIO.h
Task manager is a simple co-routine style implementation for Arduino which supports scheduling work t...
SimpleSpinLock
Definition
SimpleSpinLock.h:17
SimpleSpinLock::spinLock
bool spinLock(unsigned long iterations)
Definition
SimpleSpinLock.cpp:18
SimpleSpinLock::unlock
void unlock()
Definition
SimpleSpinLock.cpp:43
SimpleSpinLock::lock
void lock()
Definition
SimpleSpinLock.h:38
SimpleSpinLock::SimpleSpinLock
SimpleSpinLock()
Definition
SimpleSpinLock.h:29
SimpleSpinLock::tryLock
bool tryLock()
Definition
SimpleSpinLock.cpp:8