記得當初剛加入遊戲服務端這個行業的時候,有乙個老手曾經問我,知道stlmap容器和acemap容器有什麼不同嗎?當時的我對於c++多執行緒還有很多的不解和迷惑、便搖搖頭說不知道,他告訴我說,acemap容器是執行緒安全的,而stlmap容器則不是。當時的我濛濛東東,等到真正自己在使用stlmap,由於跨執行緒造成coredump時,才真正理解了執行緒安全和執行緒不安全的區別。
越到後來越想自己也封裝乙個執行緒安全的stl庫,在封裝的過程中遇見了下面的問題。比如我們小範圍的封裝一下stl的vector庫:
class vectorex
int& operator(const size_t x)
cout << "const has been called" << endl;
return data[x];
}int insert(int index,int value)
this->mutex_lock();
data[index] = value;
this->mutex_unlock();
return 0;
}int size() const
int capacity() const
vector::const_iterator begin()const
vector::const_iterator end()const
int mutex_lock()
int mutex_unlock()
private:
vectordata;
pthread_mutex_t _self_mutex;
};
對於操作符我們是無法加鎖解鎖的,所以我想ace的大師們,使用了bind()函式去封裝。
int bind(const size_t index,int value)
this->mutex_lock();
data[index] = value;
this->mutex_unlock();
return 0;
}
於insert函式類似,當然我沒有使用模板,對於模板還是不太熟悉。
為什麼HashMap不是執行緒安全的
序 最近因為專案的需求,經常會面試一些新人,也就會問他們一些基本的問題,例如,hashmap和hashtable的區別是什麼,一般人想到的就是hashmap不是執行緒安全,這點我想幾乎來面試的人都知道,但是再深入問下為什麼hashmap不是執行緒安全的,幾乎沒有人答上來,當然了,我也不會因為你回答不...
ArrayList 為什麼執行緒不安全
我們先來看看 arraylist 的 add 操作原始碼。public boolean add e e arraylist 的不安全主要體現在兩個方面。其一 elementdata size e 不是乙個原子操作,是分兩步執行的。elementdata size e size 單執行緒執行這段 完全...
STL容器的執行緒安全?
執行緒安全的情況 執行緒不安全的情況 看到風險了吧?在工程中多執行緒操作stl的場景應該還是比較常見的,乙個典型的例子就是用其來做生產者 消費者模型的佇列或者其他共享佇列,這樣為了應對執行緒安全問題我們必須自己對容器操作進行封裝。這是我自己實現的的封裝類threadsafe container.h,...