1. 程式人生 > >Boost.Asio中的執行緒

Boost.Asio中的執行緒

io_serviceio_service是執行緒安全的。幾個執行緒可以同時呼叫io_service::run()。大多數情況下你可能在一個單執行緒函式中呼叫io_service::run(),這個函式必須等到所有非同步操作完成之後才能繼續執行。然而,事實上可以在多個執行緒中呼叫io_service::run()。這會阻塞所有呼叫io_service::run()的執行緒。只要當中任何一個執行緒呼叫了io_service::run(),所有回撥都會同時被呼叫;這也意味著,當在一個執行緒中呼叫io_service::run()時,所有的回撥都被呼叫了。

socket: socket類不是執行緒安全的

。所以,要避免在某個執行緒裡讀一個socket時,同時在另外一個執行緒裡面對其進行進行寫入操作。(通常來說這種操作都是不推薦的,更別說Boost.Asio)

utility:就utility來說,因為它不是執行緒安全的,所以通常也不提倡在多個執行緒裡面同時使用。裡面的方法經常只是在很短的時間裡面使用以一下,然後就釋放了。

除了自己建立的執行緒,Boost.Asio本身也包含幾個執行緒。但是可以保證的是那些執行緒不會呼叫自己的程式碼。
這也意味著,只有呼叫了io_service::run()方法的執行緒才會呼叫回撥函式。