提升asio异步等待条件变量

Has*_*yed 7 c++ pthreads boost-thread boost-asio concurrent-programming

是否可以对boost :: asio中的条件变量执行异步等待(读取:非阻塞)?如果没有直接支持,任何有关实施它的提示将不胜感激.

我可以实现一个计时器,甚至每隔几毫秒启动一次唤醒,但这种方法非常低劣,我发现很难相信条件变量同步没有实现/记录.

Cub*_*bbi 7

如果我正确理解了intent,你想在asio线程池的上下文中发出一个事件处理程序,当一些条件变量被发出信号时?我认为在处理程序的开头等待条件变量就足够了,而io_service :: post()本身最后会回到池中,这种类似的东西:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
boost::asio::io_service io;
boost::mutex mx;
boost::condition_variable cv;
void handler()
{
    boost::unique_lock<boost::mutex> lk(mx);
         cv.wait(lk);
    std::cout << "handler awakened\n";
    io.post(handler);
}
void buzzer()
{
    for(;;)
    {
        boost::this_thread::sleep(boost::posix_time::seconds(1));
        boost::lock_guard<boost::mutex> lk(mx);
            cv.notify_all();
    }
}
int main()
{
    io.post(handler);
    boost::thread bt(buzzer);
    io.run();
}
Run Code Online (Sandbox Code Playgroud)

  • 但是等待的线程会被阻塞,是不是有办法不阻塞线程,而是注册完成处理程序?我目前正在寻找一种替代机制http://stackoverflow.com/questions/6776779/boost-asio-multi-io-service-rpc-framework-design-rfc (4认同)