2010-12-04 26 views
5

empty() neden std::queue işlevinde thread-safe değil? (Bkz. here.) const işlevleri, salt okunur olduğu için, her zaman iş parçacığı güvenli midir?Neden std :: queue :: empty() iş parçacığı güvenli değil? Const işlevleri iş parçacığı güvenli midir?

Belki de birkaç iş parçacığı tarafından yazılabilir sınıfta bazı mutable değişken olabilir? Nesne herhangi yöntem ile tadil hiç ise bir sınıfın verileri değiştirmek yok

+1

Salt okunur işlevler doğal olarak iş parçacığı değildir. Onlar güvenlidirler * eğer başka tipte yazılar yok ise *. – jalf

cevap

5

yöntemler tek evreli vardır. Aksi taktirde, başka bir iş parçacığındaki bir yöntem nesneyi (bir kilit altında, doğru) değiştirebilir ve iş parçacığına queue::empty() numaralı çağı çağırmak, kilidi almadan bir yarış koşuluna yol açabilir (uygulamasına bağlı olarak).

İlgili konular