1. 程式人生 > >share_ptr的執行緒安全讀寫方式

share_ptr的執行緒安全讀寫方式

class T { 
public:
	int get() { return t; }
	void set(int num) { t = num; }
	T():t(1) {}
private:
	int t; };
std::mutex g_mut;
std::shared_ptr<T> g_ptr;
void func(const std::shared_ptr<T>& pt) { std::cout<<pt->get(); }
void setFunc(const std::shared_ptr<T>& pt,int num) { pt->set(num); }
void read()
{
	std::shared_ptr<T> localPtr;
	{
		std::lock_guard<std::mutex> lock(g_mut);
		localPtr = g_ptr;
	}
	func(localPtr);
}
void write(int num)
{
	std::shared_ptr<T> newPtr(new T);
	{
		std::lock_guard<std::mutex> lock(g_mut);
		g_ptr = newPtr;
	}
	
	setFunc(newPtr, num);
}
int main()
{
	g_ptr = std::shared_ptr<T>(new T);
	write(2);
	read();
    return 0;
}


相關推薦

share_ptr執行安全方式

class T { public: int get() { return t; } void set(int num) { t = num; } T():t(1) {} private: int t; }; std::mutex g_mut; std::share

執行鎖分離的實現方式

在我們一般的操作中,難免會遇到讀和寫的操作,但是如果多個執行緒去讀的話它是可以並行去讀的,因為共享資料沒有發生什麼改變, 如果多個執行緒讀寫的話那就會很麻煩,或者一個執行緒讀著一個執行緒正在寫,這樣資料也可能不正確, read  read 並行化 yes read  wr

設計模式之單例模式【內附物件例項化幾種方式、實現執行安全幾種方式

繼續來複習常用的設計模式-單例模式,順便回憶一下執行緒安全的幾種實現方式。 一、什麼是單例模式 單例模式,簡單常用的一種設計模式,也很好的體現了程式碼控制物件在記憶體數量的一種方式,主要分2種實現方式: ①餓漢式,執行緒安全 ②懶漢式,執行緒不安全(新增鎖機制,可以實現執行緒安全)

執行學習----鎖的使用(十二)

讀寫鎖      讀寫鎖:分為讀鎖和寫鎖,多個讀鎖不互斥,讀鎖與寫鎖互斥,寫鎖和寫鎖互斥,這是由jvm自己控制的,你只要上好相應的鎖即可。如果你的程式碼只讀資料,可以很多人同時讀,但是不能同時寫,那就讓讀鎖;如果你的程式碼修改資料,只能有一個人在寫,且不能同時讀

執行安全的實現方式和鎖優化

什麼是執行緒安全? 在Java中執行緒安全的場景有哪些? 不可變 絕對執行緒安全 相對執行緒安全 執行緒相容 執行緒對立  Java中保證執行緒安全的方式? 互斥同步 非阻塞同步 無同步方案 1. 可重入程式碼 2. 執行緒本地儲存

29-執行同步——

1. 讀寫鎖   讀寫鎖跟互斥量是類似的,也是一種鎖,但讀寫鎖相當於互斥鎖的加強版。   因為互斥鎖缺乏併發性,例如有多個執行緒要對資料進行讀取操作,互斥鎖每次只能支援一個執行緒訪問,而讀寫鎖則支援多個執行緒同時進行讀取操作。   還是拿銀行取錢的例子來說,假

執行程式設計——

一、什麼是讀寫鎖 讀寫鎖(也叫共享-獨佔鎖)實際是一種特殊的自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作。這種鎖相對於自旋鎖而言,能提高併發性,因為在多處理器系統中,它允許同時有多個讀者來訪問共享資源,最大可能的讀者數為實

面試題之----個函式來解決多執行同時一個檔案的問題

一般的方案: //fopen():開啟檔案或者 URL,返回resource型別資料 。 $fp = fopen('./tmp/lock.txt', 'a+'); if (flock($fp, LOCK_EX)) {//取得獨佔鎖定 fwrite($fp, "Write something h

Go語言 執行簡單

一個執行緒負責讀取 主執行緒負責寫入 // test02 project main.go package main import ( "fmt" "time" ) /* 一個執行緒負責讀取

linux多執行

基本概念:讀寫鎖也叫做共享互斥鎖。當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖之前,所有試圖對這個鎖加鎖的執行緒都會被阻塞。當讀寫鎖在讀加鎖狀態,所有試圖以讀模式對它進行加鎖的執行緒都可以得到訪問權。與互斥量相比,讀寫鎖在使用之前必須初始化,在釋放它們底層的記憶體之前必須銷燬。一、

java 執行安全的實現方式

執行緒安全的定義: <<Java Concurrency In Practice>>的作者Brian  Goetz 對"執行緒安全"有一段定義: 當多個執行緒訪問一個物件的時候,

程式碼來解決多程序/執行同時一個檔案的問題。

大家都知道,PHP是沒有多執行緒概念的,儘管如此我們仍然可以用“不完美”的方法來模擬多執行緒。簡單的說,就是佇列處理。通過對檔案進行加鎖和解鎖,來實現。當一個檔案被一個使用者操作時,該檔案是被鎖定的,其他使用者只能等待,確實不夠完美,但是也可以滿足一些要求

Linux多執行學習(4) --鎖和其他型別的鎖以及執行安全

多執行緒學習總結(1):https://blog.csdn.net/hansionz/article/details/84665815 多執行緒學習總結(2):https://blog.csdn.net/hansionz/article/details/84675536 多執行緒學習總結

iOS 用佇列實現執行安全

讀寫操作時,為了提高效率,應該允許同時多個執行緒讀操作,並且只有一個執行緒寫操作。 為了實現上面功能,將讀和寫分發到相同併發佇列中,這樣讀操作會是併發的;而寫操作,以 dispatch barrier

c/c++語言中的volatile 保證執行安全的條件

背景: 關於這個問題之前討論了很多, 比如:  C++多執行緒有必要加volatile麼? 多執行緒程式設計

33-多執行緒--賣票示例+執行緒安全(產生原因+解決方式:同步)+同步(同步程式碼塊+同步的好處與弊端+同步的前提+同步函式+賣票示例的同步函式寫法+驗證同步函式的鎖+驗證靜態同步函式的鎖)

一、賣票示例 需求:四個視窗,同時售賣100張票,票號為1-100 1、沒有多執行緒時的賣票程式碼 class Ticket { //100張票 private int num = 100; public void sale() { /

實現多執行安全的3種方式

實現多執行緒安全的3種方式   1、先來了解一下:為什麼多執行緒併發是不安全的?   在作業系統中,執行緒是不擁有資源的,程序是擁有資源的。而執行緒是由程序建立的,一個程序可以建立多個執行緒,這些執行緒共享著程序中的資源。所以,當執行緒一起併發執行時,同時對一個數據進行修改,就

執行安全的Map的實現方式3種

1. HashMap,TreeMap 未進行同步考慮,是執行緒不安全的。 2. HashTable 和 ConcurrentHashMap 都是執行緒安全的。區別在於他們對加鎖的範圍不同,HashTable 對整張Hash表進行加鎖,而ConcurrentHashMap將Hash表分為16桶(s

iOS中保證執行安全的幾種方式與效能對比

一、前言 前段時間看了幾個開源專案,發現他們保持執行緒同步的方式各不相同,有@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock。後來網上查了一下,發現他們的實現機制各不相同,效能也各不一

Kotlin 的環形 ByteBuffer,理論上是執行安全的。

class CircleByteBuffer(val size:Int) { private val datas=ByteArray(size) private var start=0 private var end=0 fun getL