diff options
| author | chenjh <[email protected]> | 2021-02-26 18:23:52 +0800 |
|---|---|---|
| committer | chenjh <[email protected]> | 2021-02-26 18:23:52 +0800 |
| commit | 055c3d3e1d75fedac44ffb41943350d9844f5b7e (patch) | |
| tree | ab7ee8660930048e93cc2dcc944db40c59f08b5d /components/cplusplus/cxx_Semaphore.cpp | |
| parent | 5f17cf9204e501d971cd28486e0a7193d2f1fae4 (diff) | |
[Update] Sync from v4.0.3
Diffstat (limited to 'components/cplusplus/cxx_Semaphore.cpp')
| -rw-r--r-- | components/cplusplus/cxx_Semaphore.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/components/cplusplus/cxx_Semaphore.cpp b/components/cplusplus/cxx_Semaphore.cpp new file mode 100644 index 0000000000..c977a27c1a --- /dev/null +++ b/components/cplusplus/cxx_Semaphore.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +#include "Semaphore.h" + +using namespace rtthread; + +Semaphore::Semaphore(const char *name, int32_t count) +{ + rt_sem_init(&mID, name, count, RT_IPC_FLAG_FIFO); +} + +bool Semaphore::wait(int32_t millisec) +{ + rt_int32_t tick; + + if (millisec < 0) + tick = -1; + else + tick = rt_tick_from_millisecond(millisec); + + return rt_sem_take(&mID, tick) == RT_EOK; +} + +void Semaphore::release(void) +{ + rt_sem_release(&mID); +} + +Semaphore::~Semaphore() +{ + rt_sem_detach(&mID); +} |
