本章主要內(nèi)容
在上一章中,我們對(duì)底層原子操作和內(nèi)存模型有了詳盡的了解。在本章中,我們將先將底層的東西放在一邊(將會(huì)在第7章再次提及),來對(duì)數(shù)據(jù)結(jié)構(gòu)做一些討論。
數(shù)據(jù)結(jié)構(gòu)的選擇,對(duì)于程序來說,是其解決方案的重要組成部分,當(dāng)然,并行程序也不例外。如果一種數(shù)據(jù)結(jié)構(gòu)可以被多個(gè)線程所訪問,其要不就是絕對(duì)不變的(其值不會(huì)發(fā)生變化,并且不需同步),要不程序就要對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行正確的設(shè)計(jì),以確保其能在多線程環(huán)境下能夠(正確的)同步。一種選擇是使用獨(dú)立的互斥量,其可以鎖住需要保護(hù)的數(shù)據(jù)(這種方法已經(jīng)在第3和第4章中提到),另一種選擇是設(shè)計(jì)一種能夠并發(fā)訪問的數(shù)據(jù)結(jié)構(gòu)。
在設(shè)計(jì)并發(fā)數(shù)據(jù)結(jié)構(gòu)時(shí),你可以使用基本多線程應(yīng)用中的構(gòu)建塊(之前章節(jié)中有提及),比如,互斥量和條件變量。當(dāng)然,你也已經(jīng)在之前的章節(jié)的例子中看到,怎樣聯(lián)合不同的構(gòu)建塊,對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行寫入,并且保證這些構(gòu)建塊都是在并發(fā)環(huán)境下是線程安全的。
在本章,我們將了解一些并發(fā)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的基本準(zhǔn)則。然后,我們將再次重溫鎖和條件變量的基本構(gòu)建塊。最后,會(huì)去了解更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。在第7章,我們將了解,如何正確的“返璞歸真”,并使用第5章提到的原子操作,去構(gòu)建無鎖的數(shù)據(jù)結(jié)構(gòu)。
好吧!多說無益,讓我們來看一下并發(fā)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),都需要些什么。