2012-02-14 16 views
10

Garip bir hatam var.Özel üye ile boost mutex garip hatası

class INST 
{ 
public: 
boost::mutex m_mutex; 
}; 

std::vector<INST> m_inst; 

hata C2248: 'artırmak :: mutex :: muteksi': sınıf 'boost :: mutex' ilan özel üye erişemez bildirimi Bkz 'artırmak :: mutex :: muteksi'

Ancak, diğer sınıfım iyi, burada bir şey eksik miyim? M_mutex'i gizli olarak ilan etmeye çalıştım ama yine de aynı problemi yaşadım.

Teşekkürler.

+0

C++ hataları genellikle karmaşık ve ayrıntılıdır. Her satırın bilmeceye biraz bilgi ekleyeceğinden tam hata mesajını kopyaladığınızdan emin olun (çoklu hata XXX: satırlar olabilir). Bu durumda, büyük olasılıkla mevcut olmayan kopya kurucusunun ya da kopya kurgusunu tanımlarken hata buldu –

+0

Teşekkür ederim David, çok iş parçacığı programlama için yeni bir kullanıcıyım, lütfen sorun için bir çözüm önerebilir misiniz? Paylaşılan bir vektör var ve birkaç iş parçacığı vektörün farklı bir bölümüne erişebilir Aynı zamanda – 2607

cevap

18

mutexes, copied olamaz, bu nedenle mutex'i kopyalayacak bir kapsayıcıya yerleştiremezsiniz. Hata büyük olasılıkla muteksin özel kopya oluşturucusuna atıfta bulunmaktadır.

+0

Teşekkür ederim, sorun için bir çözüm önerebilir misiniz? Ben paylaşılan bir vektör var ve birkaç iş parçacığı aynı anda vektörün farklı bir parçası erişebilir – 2607

+0

Mutex için yer (akıllı) işaretçiler veya mutex'i kapsayıcıda içeren sınıfı veya tüm vektörü bir muteks ile koruyun (veya göreviniz için uygunsa bir dizi kullanın) – nos

+0

Lütfen beni düzeltin f Yanlış, tüm vektörü korumak için global bir mutex kullanırsam, bir seferde tüm vektöre yalnızca bir thread erişebiliyor mu? Birden çok iş parçacığının aynı anda vektörün farklı bölümlerine erişmesine izin vermeye çalışıyorum. Teşekkür ederim. – 2607

2

Bu sorunun gerçekten eski olduğunu anlıyorum, ancak bugün aynı sorunla karşılaştım ve Google beni buraya yönlendirdi. Ancak, önerilen çözüm bana uygun olmadığından, kendi projemde nasıl çözdüğümü anlatmak istedim.

Sizin gibi bir sınıf vektörüm var ve bunları böyle bir şekilde yönetiyorum, böylece vektörün üyelerine erişim başladığında, vektör bir daha asla yeniden boyutlandırılmaz. İşleme başlamadan önce, vektörü birkaç kez yeniden boyutlandırma özelliğini istiyorum. Ayrıca, iş parçacıklarının vektördeki öğelerin herhangi birinde rastgele erişimli bir şekilde çalışmasına izin vermek istedim.

Sorunu, muteks ile sınıfın yapıcısına dinamik olarak ayırarak ve onu yok edicide yok ederek çözdüm. Doğal olarak, bunu yaparsanız, sildiğinizde hiç kimsenin mutekste beklemediğini garanti etmelisiniz. Bu çözüm benim için çalışır çünkü hiçbir zaman nesneleri nesneden koparmam, sadece kabın içine girerim.