Boost.Asio中的執行緒
阿新 • • 發佈:2019-01-26
io_service:io_service是執行緒安全的。幾個執行緒可以同時呼叫io_service::run()。大多數情況下你可能在一個單執行緒函式中呼叫io_service::run(),這個函式必須等到所有非同步操作完成之後才能繼續執行。然而,事實上可以在多個執行緒中呼叫io_service::run()。這會阻塞所有呼叫io_service::run()的執行緒。只要當中任何一個執行緒呼叫了io_service::run(),所有回撥都會同時被呼叫;這也意味著,當在一個執行緒中呼叫io_service::run()時,所有的回撥都被呼叫了。
socket: socket類不是執行緒安全的
utility:就utility來說,因為它不是執行緒安全的,所以通常也不提倡在多個執行緒裡面同時使用。裡面的方法經常只是在很短的時間裡面使用以一下,然後就釋放了。
除了自己建立的執行緒,Boost.Asio本身也包含幾個執行緒。但是可以保證的是那些執行緒不會呼叫自己的程式碼。
這也意味著,只有呼叫了io_service::run()方法的執行緒才會呼叫回撥函式。