LINUX.ORG.RU

История изменений

Исправление anonymous2, (текущая версия) :

Можно подробнее?

допустим так

namespace
{
    std::mutex lock;
    std::condition_variable cv;
    std::thread_id thid;
    std::atomic<bool> shutdown{false};

    void threadWait(void)
    {
        std::unique_lock<std::mutex> lk(lock);
        cv.wait(lk, [&] { return std::this_thread::get_id() == thid || shutdown; });
    }

    void threadAllow(const std::thread_id & id)
    {
        std::lock_guard<std::mutex> lk(lock);
        thid = id;
        cv.notify_all();
    }
}

Исправление anonymous2, :

Можно подробнее?

допустим так

namespace ThreadOrder
{
    std::mutex lock;
    std::condition_variable cv;
    std::thread_id thid;
    std::atomic<bool> shutdown{false};

    void threadWait(void)
    {
        std::unique_lock<std::mutex> lk(lock);
        cv.wait(lk, [&] { return std::this_thread::get_id() == thid || shutdown; });
    }

    void threadAllow(const std::thread_id & id)
    {
        std::lock_guard<std::mutex> lk(lock);
        thid = id;
        cv.notify_all();
    }
}

Исходная версия anonymous2, :

Можно подробнее?

допустим так

namespace ThreadOrder
{
    std::mutex lock;
    std::condition_variable cv;
    std::thread_id thid;
    std::atomic<bool> shutdown{false};

    void threadWait(void)
    {
        std::unique_lock<std::mutex> lk(lock);
        cv.wait( lk, [&] { return std::this_thread::get_id() == thid || shutdown} );
    }

    void threadAllow(const std::thread_id & id)
    {
        std::lock_guard<std::mutex> lk(lock);
        thid = id;
        cv.notify_all();
    }
}