xref: /nrf52832-nimble/rt-thread/components/cplusplus/Semaphore.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 "Semaphore.h"
10*10465441SEvalZero 
11*10465441SEvalZero using namespace rtthread;
12*10465441SEvalZero 
Semaphore(const char * name,int32_t count)13*10465441SEvalZero Semaphore::Semaphore(const char *name, int32_t count)
14*10465441SEvalZero {
15*10465441SEvalZero     rt_sem_init(&mID, name, count, RT_IPC_FLAG_FIFO);
16*10465441SEvalZero }
17*10465441SEvalZero 
wait(int32_t millisec)18*10465441SEvalZero bool Semaphore::wait(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_sem_take(&mID, tick) == RT_EOK;
28*10465441SEvalZero }
29*10465441SEvalZero 
release(void)30*10465441SEvalZero void Semaphore::release(void)
31*10465441SEvalZero {
32*10465441SEvalZero     rt_sem_release(&mID);
33*10465441SEvalZero }
34*10465441SEvalZero 
~Semaphore()35*10465441SEvalZero Semaphore::~Semaphore()
36*10465441SEvalZero {
37*10465441SEvalZero     rt_sem_detach(&mID);
38*10465441SEvalZero }
39