我一直在看网络-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
的潜在值。