您好,登錄后才能下訂單哦!
1、原子類型和原子操作
(1)類型
(2)操作
(3)詳述
● 原子類型只能從其模板參數(shù)類型中進(jìn)行構(gòu)造,標(biāo)準(zhǔn)不允許原子類型進(jìn)行拷貝構(gòu)造、移動(dòng)構(gòu)造,以及使用operator=等
● atomic_flag 是一個(gè)原子的布爾類型,無(wú)鎖的,即線程對(duì)其訪問不需要加鎖;可支持test_and_set()是一種原子操作,用于在一個(gè)內(nèi)存空間原子地寫入新值并且返回舊值,如果對(duì)象被設(shè)置了,則返回true;clear()清除對(duì)象值,將變量值設(shè)為false;
2、內(nèi)存模型,順序一致性和memory_order
(1)類型
(2)詳述
● x86以及SPARC(TSO模式)都被看作是采用強(qiáng)順序內(nèi)存模型的平臺(tái);而Alpha、PowerPC、ArmV7等平臺(tái),則采用弱順序內(nèi)存模型
● 存在弱順序的內(nèi)存模型原因:可使得處理器進(jìn)一步發(fā)掘指令中的并行性,使得指令執(zhí)行的性能更高
● 默認(rèn)情況下,原子類型的變量在線程中總是保持著順序執(zhí)行的特性。
● 原子存儲(chǔ)操作store可使用relaxed seq_cst release;原子寫操作load可使用relaxed seq_cst acquire consume;可讀可寫操作可使用所有
● 先于發(fā)生關(guān)系總是傳遞的
3、線程局部存儲(chǔ)
(1)擁有線程生命周期及線程可見性的變量
(2)如POSIX標(biāo)準(zhǔn)中的錯(cuò)誤碼全局變量errno,在多線程中將遭遇問題;
(3)c++11中的解決方法是通過thread_local 修飾符聲明變量即可:如int thread_local errCode;則errCode在線程開始時(shí)被初始化,而在線程結(jié)束時(shí)該值不在有效
4、快速退出
(1)teminate函數(shù);沒有被捕捉的異常就會(huì)導(dǎo)致其被調(diào)用,其默認(rèn)是去調(diào)用abort函數(shù)。可通過set_terminate函數(shù)改變默認(rèn)行為
(2)abort不會(huì)調(diào)用任何析構(gòu)函數(shù)<terminate默認(rèn)下也一樣>,拋出信號(hào):SIGABRT
(3)exit:屬于正常退出范疇的程序終止,會(huì)正常調(diào)用自動(dòng)變量的析構(gòu)函數(shù),且會(huì)調(diào)用atexit注冊(cè)的函數(shù),調(diào)用次序與其注冊(cè)順序相反
(4)在C++11中,引入quick_exit,該函數(shù)并不執(zhí)行析構(gòu)函數(shù)而只是使程序終止。與abort不同,abort是異常退出,quick_exit和exit同屬于正常退出。也可使用at_quick_exit注冊(cè)函數(shù)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。