void wait_available(available desired) { if (!is_available(desired)) { assert(m_started); lock (m_mutex) //std::unique_lock<std::mutex> lock(m_mutex); { //if (!is_available(desired)) // m_condition.wait(lock, [this, desired] () { return is_available(desired); }); } } }
public bool is_available(available desired) { return((m_available & (unsigned)desired) == (unsigned)desired); //return (m_available.load(std::memory_order_acquire) & desired) == desired; }
void notify_available(available value) { //std::unique_lock<std::mutex> lock(m_mutex); //m_available.fetch_or(value, std::memory_order_release); //m_condition.notify_all(); }