陳碩多線程服務器編程--持續更新

1、https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html C++中voliate關鍵字,多線程共享變量用voliate修飾,因爲有時候編譯器優化,我們取值直接從寄存器中拿來,但是寄存器和內存中這個數據可能不一樣,具體例子可以看鏈接中,所有加voliate修飾,保證每次都是從內存中拿和放。

2、weak_ptr不僅僅可以解決循環引用的問題,現在給你一個實際場景:
全局數組裏面的指針指向的數據不知道是否還存在,我們不能拿來直接判是不是null(如果原來的沒有了,被替換成別的了),這時候可以用智能指針,原來的數據用shared_ptr指向,weak_ptr記錄,當我們處理數組的時候,這個weak_ptr的cnt=0就說明被銷燬了,我們刪掉,如果沒有就weak_ptr.lock再拿來用。

3、可重入鎖和不可重入鎖的設計思想不同,可重入鎖側重一個線程佔用一個鎖,在單個線程內這個鎖是安全的。不可重入,在單個線程內也只能被佔用一次,實現原理就是添加了一個計數。 標誌下現在的佔用線程,記錄下線程佔用計數,當佔用數爲0的時候纔可以被其他線程所佔用。

4、shared_ptr的安全級別和string等標準庫一致,多個線程可同時讀,讀寫就要要加鎖。
當發生讀寫的時候我們還是加上互斥鎖(最簡單的鎖)吧。

智能指針不需要我們定義虛析構了,因爲指針存了兩個東西,這個對象的引用,還有指向的指針,銷燬時會同時釋放,可以查看源碼。

5、

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章