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