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