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)14Mutex::Mutex(const char *name) 15 { 16 rt_mutex_init(&mID, name, RT_IPC_FLAG_PRIO); 17 } 18 lock(int32_t millisec)19bool 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()31bool Mutex::trylock() 32 { 33 return lock(0); 34 } 35 unlock()36void Mutex::unlock() 37 { 38 rt_mutex_release(&mID); 39 } 40 ~Mutex()41Mutex::~Mutex() 42 { 43 rt_mutex_detach(&mID); 44 } 45