1、原子類型和原子操作
(1)類型
(2)操作
(3)詳述
● 原子類型只能從其模板參數類型中進行構造,標準不允許原子類型進行拷貝構造、移動構造,以及使用operator=等
● atomic_flag 是一個原子的布爾類型,無鎖的,即線程對其訪問不需要加鎖;可支持test_and_set()是一種原子操作,用於在一個內存空間原子地寫入新值並且返回舊值,如果對象被設置了,則返回true;clear()清除對象值,將變量值設爲false;
2、內存模型,順序一致性和memory_order
(1)類型
(2)詳述
● x86以及SPARC(TSO模式)都被看作是採用強順序內存模型的平臺;而Alpha、PowerPC、ArmV7等平臺,則採用弱順序內存模型
● 存在弱順序的內存模型原因:可使得處理器進一步發掘指令中的並行性,使得指令執行的性能更高
● 默認情況下,原子類型的變量在線程中總是保持着順序執行的特性。
● 原子存儲操作store可使用relaxed seq_cst release;原子寫操作load可使用relaxed seq_cst acquire consume;可讀可寫操作可使用所有
● 先於發生關係總是傳遞的
3、線程局部存儲
(1)擁有線程生命週期及線程可見性的變量
(2)如POSIX標準中的錯誤碼全局變量errno,在多線程中將遭遇問題;
(3)c++11中的解決方法是通過thread_local 修飾符聲明變量即可:如int thread_local errCode;則errCode在線程開始時被初始化,而在線程結束時該值不在有效
4、快速退出
(1)teminate函數;沒有被捕捉的異常就會導致其被調用,其默認是去調用abort函數。可通過set_terminate函數改變默認行爲
(2)abort不會調用任何析構函數<terminate默認下也一樣>,拋出信號:SIGABRT
(3)exit:屬於正常退出範疇的程序終止,會正常調用自動變量的析構函數,且會調用atexit註冊的函數,調用次序與其註冊順序相反
(4)在C++11中,引入quick_exit,該函數並不執行析構函數而只是使程序終止。與abort不同,abort是異常退出,quick_exit和exit同屬於正常退出。也可使用at_quick_exit註冊函數
c++11 原子類型與原子操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Nagios 3.2 監控部署(三)
samplelife
2019-02-23 13:57:36
centos6.4安裝heartbeat3.0版本安裝---超詳細
心碎小胖子
2019-02-23 13:34:47
apache和tomcat7.0整合
心碎小胖子
2019-02-23 13:34:47
操縱BGP路徑選擇---local preference屬性案例(配圖+詳細驗證過程)
ciscodocu
2019-02-23 00:38:00
mysql5.7源碼安裝
腿毛的憂傷
2019-02-23 00:33:41
單獨編譯apache的rewrite模塊
腿毛的憂傷
2019-02-23 00:33:40
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
rangercat
2019-02-23 00:29:10
magent + memcached 集羣測試
資本丿
2019-02-23 00:17:58
OpenStack實踐(二):Linux Bridge方式實現Local Network
loong576
2019-02-23 00:17:11
XenServer 5.6 SP2開啓Intellicache
虎頭
2019-02-23 00:15:05
阿里雲主機遭受minerd類型***
李伯億
2019-02-23 00:14:28
Linux下的SVN+Apache的搭建
jianwuhonchen
2019-02-23 00:08:54
cacti監控apache
huai_1314
2019-02-22 23:58:11