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