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