在这种情况下避免忙碌的等待

时间:2013-09-24 12:00:40

标签: c multithreading libcurl apr

我有一个使用不同线程来创建不同类型作业的进程。

一个这样的线程必须以非阻塞的方式发送推送通知(因此我将使用libcurl,因为多接口和SSL支持)。主线程必须将作业传递给worker,我考虑使用apache apr消息队列进行消息传递。因为在同一个线程中我必须检查传入的消息和卷曲句柄的可用性我认为我将使用这样的东西:

while (1)
{
    while (apr_queue_try_pop(queue, &msg) == APR_SUCCESS)
    {
        // do something with the message
    }

    // perform a select or poll in the curl multi handle
    // treat the handles that are available for reads/writes
}

在线程启动功能中。

这是一种忙碌的等待,有更好的解决方案吗?

使用C99和Linux x86_64。

1 个答案:

答案 0 :(得分:0)

很难准确回答你的问题,但信息不足。但是,如果您显示的代码是工作代码,即在线程中启动,并且需要频繁推送通知,那么我没有看到这不起作用的原因。至于你的问题这是一种忙碌的等待,是否有更好的解决方案?我通常会做一些事情,一旦它负责的任务完成就会导致线程空闲,比如使用一个睡眠(1000)。线程时间片的其余部分未使用循环。像这样:

while (1)
{
    while (apr_queue_try_pop(queue, &msg) == APR_SUCCESS)
    {
        // do something with the message
    }

    // perform a select or poll in the curl multi handle
    // treat the handles that are available for reads/writes
    Sleep(1000);
}