NET_TS_CONCURRENCY_HINT_IS_LOCKING宏的使用

时间:2018-07-08 14:53:45

标签: c++ boost-asio

我一直在看网络-ts scheduler服务代码,尤其是它的constructor,因为您可以看到它包含两个参数

1)execution_context(如iocontext)

2)concurrency_hint(默认为0)

因此,如果我创建io_context的默认实例,则我的理解是concurrency_hint将变成#define NET_TS_CONCURRENCY_HINT_DEFAULT -1的-1

io_context::io_context()
  : impl_(add_impl(new impl_type(*this, NET_TS_CONCURRENCY_HINT_DEFAULT)))
{
}

其中using impl_type = scheduler;

然后构造函数将基于所讨论的宏启用锁定原语(条件互斥锁)

mutex_(NET_TS_CONCURRENCY_HINT_IS_LOCKING( SCHEDULER, concurrency_hint))

SCHEDULER是位掩码0x1u,当此宏扩展时,它看起来像

(((static_cast<unsigned>(concurrency_hint) \
    & (0xFFFF0000u \
      | 0x1u)) \
        ^ 0xA5100000u) != 0)

然后,如果将concurrency_hint替换为-1,结果将是true,如果我们将concurrency_hint替换为0或任何正值,它将保留true

我只是好奇,

1)为什么我们需要一个宏才能在此处启用mutex?为什么不能采用这种形式mutex_((concurrency_hint>1) ? true : false)。确定一定有原因。

2)宏将返回false的潜在值。

0 个答案:

没有答案