本章主要內(nèi)容
上一章中,我們已經(jīng)對線程管理有所了解了,現(xiàn)在讓我們來看一下“共享數(shù)據(jù)的那些事”。
想象一下,你和你的朋友合租一個(gè)公寓,公寓中只有一個(gè)廚房和一個(gè)衛(wèi)生間。當(dāng)你的朋友在衛(wèi)生間時(shí),你就會(huì)不能使用了(除非你們特別好,好到可以在同時(shí)使用一個(gè)房間)。這個(gè)問題也會(huì)出現(xiàn)在廚房,假如:廚房里有一個(gè)組合式烤箱,當(dāng)在烤香腸的時(shí)候,也在做蛋糕,就可能得到我們不想要的食物(香腸味的蛋糕)。此外,在公共空間將一件事做到一半時(shí),發(fā)現(xiàn)某些需要的東西被別人借走,或是當(dāng)離開的一段時(shí)間內(nèi)有些東西被變動(dòng)了地方,這都會(huì)令我們不爽。
同樣的問題,也困擾著線程。當(dāng)線程在訪問共享數(shù)據(jù)的時(shí)候,必須定一些規(guī)矩,用來限定線程可訪問的數(shù)據(jù)位。還有,一個(gè)線程更新了共享數(shù)據(jù),需要對其他線程進(jìn)行通知。從易用性的角度,同一進(jìn)程中的多個(gè)線程進(jìn)行數(shù)據(jù)共享,有利有弊。錯(cuò)誤的共享數(shù)據(jù)使用是產(chǎn)生并發(fā)bug的一個(gè)主要原因,并且后果要比香腸味的蛋糕更加嚴(yán)重。
本章就以在C++中進(jìn)行安全的數(shù)據(jù)共享為主題。避免上述及其他潛在問題的發(fā)生的同時(shí),將共享數(shù)據(jù)的優(yōu)勢發(fā)揮到最大。