summaryrefslogtreecommitdiff
path: root/components/libc/cplusplus/cpp11/gcc/condition_variable.cpp
blob: 2860dd916182c1f3dedeed61a30ad806eaf37bbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
 * 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