為什麼執行緒安全的ACE容器不支援 操作符

2021-09-23 21:15:01 字數 1097 閱讀 6874

記得當初剛加入遊戲服務端這個行業的時候,有乙個老手曾經問我,知道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,...