ACE,Python和Java(我所知道的)中要獲得多線程的能力,都是通過從一個線程對象基類繼承,重載特定的成員函數來實現。簡單的來看,它用起 來也相當簡單,理解起來也不復雜,但,用過一段時間之后,就會發現處理復雜問題時,你會遇到許多的限制。
1.必須從一個線程對象基類繼承嗎?
現在看來是的,否則,你只有使用系統OS提供的線程函數了。
2.我已經有個類了,它不是從線程對象基類繼承的,我要使用多繼承嗎?
是的,除非重寫。
3.我有一個函數,想讓他在另一個線程執行,一定要寫個類嗎?
是的。
4.我有一個類,它的每個成員函數我都想他們在另外的線程中執行,怎么辦?
線程對象基類只有一個線程函數,你必須通過某種通訊機制去讓它執行不同的成員函數。
4.當線程在執行一個對象的某個成員時,這個對象被刪除了怎么辦?
沒辦法,你必須自己管理對象的生存期。
嗚呼!問題越來越多,該怎么辦?我們需要某種透明的線程模型,他能處理任意的需要被異步執行的類的成員函數或者普通函數,它能提供一種策略,使得我們能 自動管理處理不同線程中的對象的生存期。我們現在有了這種工具了嗎?
熟悉Boost的人可能覺得boost.thread也許提供了這種能力。很不幸,它滿足了一部分上述需求。
正在實現上述需求的一個線程模型。它將任務與任務的執行者分離,它支持人任何的任務,不論它是普通的函數,還是具有任意參數的成員函數,你均能將它作為 一個任務拋到其他的線程執行,它是非侵入式,通過它所支持的生命期管理,你不用在擔心對象在異步執行時被銷毀。它用模板實現。