本章主要內(nèi)容
C++11標(biāo)準(zhǔn)中,有一個(gè)十分重要特性,常被程序員們所忽略。它不是一個(gè)新語法特性,也不是新工具,它就是多線程(感知)內(nèi)存模型。內(nèi)存模型沒有明確的定義基本部件應(yīng)該如何工作的話,之前介紹的那些工具就無法正常工作。那為什么大多數(shù)程序員都沒有注意到它呢?當(dāng)你使用互斥量保護(hù)你的數(shù)據(jù)和條件變量,或者是“期望”上的信號(hào)事件時(shí),對于互斥量為什么能起到這樣作用,大多數(shù)人不會(huì)去關(guān)心。只有當(dāng)你試圖去“接觸硬件”,你才能詳盡的了解到內(nèi)存模型是如何起作用的。
C++是一個(gè)系統(tǒng)級(jí)別的編程語言,標(biāo)準(zhǔn)委員會(huì)的目標(biāo)之一就是不需要比C++
還要底層的高級(jí)語言。C++
應(yīng)該向程序員提供足夠的靈活性,無障礙的去做他們想要做的事情;當(dāng)需要的時(shí)候,可以讓他們“接觸硬件”。原子類型和原子操作就允許他們“接觸硬件”,并提供底層級(jí)別的同步操作,通常會(huì)將常規(guī)指令數(shù)縮減到1~2個(gè)CPU指令。
本章,我們將討論內(nèi)存模型的基本知識(shí),而后再了解一下原子類型和操作,最后了解與原子類型操作相關(guān)的各種同步。這個(gè)過程會(huì)比較復(fù)雜:除非你已經(jīng)打算使用原子操作(比如,第7章的無鎖數(shù)據(jù)結(jié)構(gòu))同步你的代碼,否則,就沒有必要了解過多的細(xì)節(jié)。
讓我們先輕松愉快的來看一下有關(guān)內(nèi)存模型的基本知識(shí)。