29 explicit mutex(MUTEX::mutex_type type = MUTEX::BLOCK) : _type(type), _task(
nullptr) { }
31 inline void lock()
override {
35 case MUTEX::ACTIVE_WAIT: {
45 task::enterCritical();
46 task::currentTask()->block(&_lock);
47 task::leaveCritical();
53 _task = task::currentTask();
56 inline void unlock()
override {
58 assert(task::currentTask() == _task);
64 inline bool try_lock()
override {
65 bool res = _lock.try_lock();
67 _task = task::currentTask();
78 MUTEX::mutex_type _type;