0
哪個更好或更快,A或B?一個寫操作和一個讀操作:使用一個wrlock兩個vs一個rdlock讀操作和一個wrlock寫操作?
std::deque<Myclass> queue;
... // do something
std::size_t size = 0;
... // create n threads, one push queue and others pop queue.
// a thread do below
#ifdef A
pthread_rwlock_wrlock(&rwlock);
queue.push_front(myobj);
size = queue.size();
pthread_rwlock_unlock(&rwlock);
#endif
#ifdef B
pthread_rwlock_wrlock(&rwlock);
queue.push_front(myobj);
pthread_rwlock_unlock(&rwlock);
// if there is some operation,
// I think this B is better,
// because I should get the newest size.
pthread_rwlock_rdlock(&rwlock);
size = queue.size();
pthread_rwlock_unlock(&rwlock);
#endif
// other threads do below
pthread_rwlock_wrlock(&rwlock);
queue.pop_back();
pthread_rwlock_unlock(&rwlock);
這是我的不理解。
的任何資料或意見是很大的幫助我!
爲我可憐的英語道歉!
謝謝。我從你有用的答案中得到了一些信息:1.「獲得鎖定」是很重的(也許是它的spinlock包裝的系統調用?)對幾個流行或推動?沒有實際的環境,沒有人會更好?關於STL,我很奇怪,爲什麼不直接使用std :: deque :: size()而不加鎖(它可能就是{return std :: dequeue :: inner_var_length;},是嗎?)其實,我正在寫一個線程池,任何鏈接或建議?再次感謝。 – HenryLee
@HenryLee - 訪問存儲器位置爲在帶螺紋的環境下,以相同的存儲位置的寫入,可以通過其他線程讀取經常是未定義的行爲(雖然它取決於所使用的線程存儲器模型) – Attila
明白了。謝謝。 – HenryLee