本章主要內(nèi)容
之前章節(jié)著重于介紹使用C++
11中的新工具來寫并發(fā)代碼。在第6、7章中我們了解到,如何使用這些工具來設(shè)計(jì)可并發(fā)訪問的基本數(shù)據(jù)結(jié)構(gòu)。這就好比一個(gè)木匠,其不僅要知道如何做一個(gè)合頁,一個(gè)組合柜,或一個(gè)桌子;并發(fā)的代碼的使用,要比使用/設(shè)計(jì)基本數(shù)據(jù)結(jié)構(gòu)頻繁的多。要將眼界放寬,就需要構(gòu)建更大的結(jié)構(gòu),進(jìn)行高效的工作。我將使用多線程化的C++
標(biāo)準(zhǔn)庫算法作為例子,不過這里的原則也適用于對(duì)其他應(yīng)用程序的擴(kuò)展。
認(rèn)真思考如何進(jìn)行并發(fā)化設(shè)計(jì),對(duì)于每個(gè)編程項(xiàng)目來說都很重要。不過,寫多線程代碼的時(shí)候,需要考慮的因素比寫序列化代碼多得多。不僅包括一般性因素,例如:封裝,耦合和聚合(這些在很多軟件設(shè)計(jì)書籍中有很詳細(xì)的介紹),還要考慮哪些數(shù)據(jù)需要共享,如何同步訪問數(shù)據(jù),哪些線程需要等待哪些線程,等等。
本章將會(huì)關(guān)注這些問題,從高層(但也是基本的)考慮,如何使用線程,哪些代碼應(yīng)該在哪些線程上執(zhí)行;以及,這將如何影響代碼的清晰度,并從底層細(xì)節(jié)上了解,如何構(gòu)建共享數(shù)據(jù)來優(yōu)化性能。
那么就先來看一下,如何在線程間劃分工作。