[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/ddeka0/UserSpaceThread/main/notification_queue.cpp [Back]  [Original]

/**
 * @file notification_queue.cpp
 * @author d.deka (https://ddeka0.github.io/)
 * @brief 
 * @version 0.1
 * @date 2021-02-14
 * 
 */
#include "notification_queue.hpp"
#include "logger.hpp"

/** done()
 * @brief 
 * Thread safe queue, where user threads are kept
 */
void notification_queue::done() {
    {
        lock_t lock{_mutex};
        _done = true;
    }
    _ready.notify_all();
}

/**
 * @brief  pop(ThreadCtx** x)
 * 
 * @param x 
 * @return true 
 * @return false 
 */
bool notification_queue::pop(ThreadCtx** x) {
    lock_t lock{_mutex};
    _ready.wait(lock,[this]() {
        Log("Sleeping ....TID = ",THIS_THREAD_ID);
        return !_q.empty() || _done;
    });
    if(_q.empty() || _done) {
        return false;
    }
    *x = std::move(_q.front());
    _q.pop_front();
    return true;
}

/**
 * @brief 
 * 
 * @return std::size_t 
 */
std::size_t notification_queue::get_size() {
    lock_t lock{_mutex};
    return _q.size();
}

Web Proxy Viewer  |  New URL  |  Original Page