tutrcos
読み取り中…
検索中…
一致する文字列を見つけられません
mutex.hpp
[詳解]
1#pragma once
2
3#include <cstdint>
4#include <memory>
5#include <type_traits>
6
7#include "cmsis_os2.h"
8
9namespace tutrcos {
10namespace core {
11
12class Mutex {
13private:
14 struct Deleter {
15 void operator()(osMutexId_t mutex_id) { osMutexDelete(mutex_id); }
16 };
17
18 using MutexId = std::unique_ptr<std::remove_pointer_t<osMutexId_t>, Deleter>;
19
20public:
22 osMutexAttr_t attr = {};
23 attr.attr_bits = osMutexPrioInherit;
24 mutex_id_ = MutexId{osMutexNew(&attr)};
25 }
26
27 bool try_lock(uint32_t timeout) {
28 return osMutexAcquire(mutex_id_.get(), timeout) == osOK;
29 }
30
31 void lock() { try_lock(osWaitForever); }
32
33 void unlock() { osMutexRelease(mutex_id_.get()); }
34
35private:
36 MutexId mutex_id_;
37};
38
39} // namespace core
40} // namespace tutrcos
Definition mutex.hpp:12
void lock()
Definition mutex.hpp:31
Mutex()
Definition mutex.hpp:21
bool try_lock(uint32_t timeout)
Definition mutex.hpp:27
void unlock()
Definition mutex.hpp:33
Definition kernel.hpp:7