一般来说,并发使用不同的对象是安全的,但并发使用单个对象是不安全的。但是,诸如 io_context
之类的类型提供了更强的保证,即并发使用单个对象是安全的。
多个线程可以调用 io_context::run()
来设置一个线程池,完成处理程序可以从该线程池中调用。这种方法也可以与 post()
一起使用,作为跨线程池执行任意计算任务的一种手段。
请注意,所有已加入 io_context
线程池的线程都被认为是等效的,并且 io_context
可能会以任意方式在它们之间分配工作。
此库在特定平台上的实现可能会使用一个或多个内部线程来模拟异步性。在可能的范围内,这些线程对于库用户必须是不可见的。 特别是,这些线程
以下保证是对这种方法的补充
io_context::run()
的线程中调用。因此,库用户的责任是创建和管理所有将传递通知的线程。
这种方法的原因包括
io_context::run()
,用户的代码可以避免与同步相关的开发复杂性。 例如,库用户可以实现单线程(从用户的角度来看)的可扩展服务器。CoInitializeEx
。