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