执行一系列指令而不切换到另一个线程

时间:2014-03-08 12:34:00

标签: c++ multithreading boost boost-thread

我使用boost编写了一个MultiThread C ++代码。 我在主线程中有以下代码:

while (!mInputQueue.empty() && mStartProcessJobs)
    mProcessJobs.wait(lock);

第二行应该在第一行之后立即执行,并且不应该发生上下文切换。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

根据作业的性质,您可以使用异步服务提供程序。

通常这些存在于异步IO(例如,非阻塞模式下的套接字,Windows上的IO完成端口,libaio等)。

Boost Asio将所有这些接口(以及一些与定时器,平台特定句柄或例如串行端口相关的接口)利用到服务对象中。这使您可以异步运行许多作业,可能只在一个线程上运行。这意味着没有上下文切换

Asio的io_service有几种发布/分派工作的方式。根据您使用的内容,作业甚至可以立即执行 同步

我建议您查看一些样本,因为它看起来正是您需要的样本。

PS。除了boost之外还有其他更低级别的库具有相同的功能,但我还没有使用它们。我认为最受欢迎的是libuv / libevent(IIRC)