35 lines
784 B
C++
35 lines
784 B
C++
|
/*
|
||
|
* Copyright (c) 2006-2021, RT-Thread Development Team
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*
|
||
|
* Change Logs:
|
||
|
* Date Author Notes
|
||
|
* 2021-04-27 flybreak the first version.
|
||
|
*/
|
||
|
|
||
|
#include "condition_variable"
|
||
|
|
||
|
namespace std
|
||
|
{
|
||
|
void condition_variable::wait(unique_lock<mutex>& lock)
|
||
|
{
|
||
|
int err = pthread_cond_wait(&_m_cond, lock.mutex()->native_handle());
|
||
|
|
||
|
if (err)
|
||
|
{
|
||
|
throw_system_error(err, "condition_variable::wait: failed to wait on a condition");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk)
|
||
|
{
|
||
|
// TLS currently not available
|
||
|
mutex* mut = lk.release();
|
||
|
mut->unlock();
|
||
|
cond.notify_all();
|
||
|
}
|
||
|
|
||
|
|
||
|
} // namespace std
|