1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  */
9 
10 #include "cxx_mutex.h"
11 
12 using namespace rtthread;
13 
Mutex(const char * name)14 Mutex::Mutex(const char *name)
15 {
16     rt_mutex_init(&mID, name, RT_IPC_FLAG_PRIO);
17 }
18 
lock(int32_t millisec)19 bool Mutex::lock(int32_t millisec)
20 {
21     rt_int32_t tick;
22 
23     if (millisec < 0)
24         tick = -1;
25     else
26         tick = rt_tick_from_millisecond(millisec);
27 
28     return rt_mutex_take(&mID, tick) == RT_EOK;
29 }
30 
trylock()31 bool Mutex::trylock()
32 {
33     return lock(0);
34 }
35 
unlock()36 void Mutex::unlock()
37 {
38     rt_mutex_release(&mID);
39 }
40 
~Mutex()41 Mutex::~Mutex()
42 {
43     rt_mutex_detach(&mID);
44 }
45