STL listesindeki bir push-backing parçacığım ve listeden başka bir thread pop-fronting var. Bu durumda mutex ile listeyi kilitlemem gerekir mi? Muhtemelen:push_back pop_front senaryosunda STL listesini mutex ile kilitlemem gerekir mi?
cevap
: birden fazla parçacığı, tek bir kap erişim durumunda
ve en az bir diş, potansiyel olarak daha sonra kullanıcı kabı kere sırasında parçacıkları arasındaki karşılıklı dışlama sorumludur, mal olabilir.
Her iki ileti diziniz de listeyi değiştirdiğinden, sanırım onu kilitlemelisiniz.
. Bu işlemler atomik olmak için yeterince basit değildir, bu yüzden uygulama sadece gerekli kilitlemeyi açıkça gerçekleştirirse sadece diş güvenlidirler. Ancak, C++ standardı, bu işlemlerin iş parçacığı güvenli olup olmadığını belirtmez, bu nedenle, karar vermek için tek tek uygulamalara kalmış demektir. Dokümanları kontrol et. (Ya da hangi uygulamayı kullandığınızı bize bildirin)
Bir STL uygulamasının iş parçacığı için güvenli olduğu konusunda hiçbir garanti yoktur ve performansa sahip olmasından ötürü çoğunun olmadığını tahmin ederim. Muteks kullanmalısın.
stl pop/push işlemleri atom olmayan AFAIK olduğundan, muteks kullanmanız gerekir. SGI's STL on Thread Safety kaynaktan
En STL uygulamaları Eğer kilitleme olmadan çeşitli örneklerini birkaç parçacığı bir listesi türünden erişebilir sens güvenli ipliğine bağlıdır. Fakat listenin aynı örneğine erişirken kilitlenmelisiniz. thread safty in sgi stl
- 1. std :: list iş parçacığı push_back, ön, pop_front
- 2. Std :: mutex ile başlık dosyası için clr seçeneğini kapatın :: mutex
- 3. STL
- 4. Taşı :: push_back
- 5. vektör push_back olmaz()
- 6. Geçici tabloyu indekslemem gerekir mi?
- 7. Özel üye ile boost mutex garip hatası
- 8. push_back() ve push_front(), Java
- 9. vektörel vektörler push_back
- 10. C++ push_back 2d deque
- 11. C vektörü meraklı davranışı ++ :: push_back()
- 12. Boost mutex throwing (tek?) Istisnası
- 13. C++ ile problem çözme STL
- 14. hangi durumlarda bir değişkeni eşzamanlı erişimden kilitlemem gerekiyor?
- 15. Windows'ta .DS_Store yüklemem gerekir mi?
- 16. Kapsam belirleme ile çalışmak için ctags + Vim mi alıyorsunuz?
- 17. Neden std :: mutex, CRITICAL_SECTION
- 18. Automapper - Nesnelerin listesini eşler mi?
- 19. C++: Push_back() ve back() işlevinin
- 20. R - print() ile belirgin yeni satır karakteri eklemem gerekir mi?
- 21. LoadIconWithScaleDown ile yapmış olsaydım DestroyIcon'u aramam gerekir mi?
- 22. Bir STL vektörünün içindeki bir C++ STL vektörünü bulmak için
- 23. 10 PHP // Thread // Mutex // Cond Kullanılıyor
- 24. Ajax senaryosunda bir hata nasıl döndürülür
- 25. boost :: filter_iterator - bunu STL ile nasıl yapardım?
- 26. Javascript geliştiricilerinin jquery'yi bilmesi gerekir mi?
- 27. .php dosyalarının .php uzantılı olması gerekir mi?
- 28. git - Sürüm kontrolü için Pipfile.lock gerekir mi?
- 29. "Kalıtsal" satırı kayıt yapıcılara eklemem gerekir mi?
- 30. ViewModel'in kurucumun ViewModel'in verilerini doldurması gerekir mi?
SGI'ın STL STL hem C uygulanan ++ standart kitaplık olarak aynı değildir:
detaylı bilgi için bu konuda bakın. İkincisi eşzamanlılık veya iş parçacığı hakkında hiçbir şey söylemiyor. (Aynı zamanda burada başka birtakım farklılıklar da var. Ama kısaca, SGI'nın stdlib'e uygulayacağını söyleyemezsin. – jalf