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
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