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 * 2016/10/1 Bernard The first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #pragma once 12*10465441SEvalZero 13*10465441SEvalZero #include <stdint.h> 14*10465441SEvalZero #include <rtthread.h> 15*10465441SEvalZero 16*10465441SEvalZero namespace rtthread { 17*10465441SEvalZero 18*10465441SEvalZero /** The Mutex class is used to synchronise the execution of threads. 19*10465441SEvalZero This is for example used to protect access to a shared resource. 20*10465441SEvalZero */ 21*10465441SEvalZero class Mutex { 22*10465441SEvalZero public: 23*10465441SEvalZero /** Create and Initialize a Mutex object */ 24*10465441SEvalZero Mutex(const char* name = "mutex"); 25*10465441SEvalZero ~Mutex(); 26*10465441SEvalZero 27*10465441SEvalZero /** Wait until a Mutex becomes available. 28*10465441SEvalZero @param millisec timeout value or 0 in case of no time-out. (default: WaitForever) 29*10465441SEvalZero @return true if the mutex was acquired, false otherwise. 30*10465441SEvalZero */ 31*10465441SEvalZero bool lock(int32_t millisec = -1); 32*10465441SEvalZero 33*10465441SEvalZero /** Try to lock the mutex, and return immediately 34*10465441SEvalZero @return true if the mutex was acquired, false otherwise. 35*10465441SEvalZero */ 36*10465441SEvalZero bool trylock(); 37*10465441SEvalZero 38*10465441SEvalZero /** Unlock the mutex that has previously been locked by the same thread 39*10465441SEvalZero */ 40*10465441SEvalZero void unlock(); 41*10465441SEvalZero 42*10465441SEvalZero private: 43*10465441SEvalZero struct rt_mutex mID; 44*10465441SEvalZero }; 45*10465441SEvalZero 46*10465441SEvalZero } 47