2012-12-19 14 views
8

Bir işlemde yaklaşık 300 destek dişi oluşturuyorum. İş parçacığı kimliğine göre belirli bir iş parçacığına katılmanın bir yolu var mı?Özel bir destek dişine katılın

+3

Bu konuları nasıl yönetiyorsunuz? (Bir şekilde dişlerin koptuğunu hatırlıyorsunuz, değil mi?) –

cevap

9

Göksel, boost::thread dosyalarınızı nasıl kaydedeceğinize bağlıdır. Eğer (T = boost::thread* birlikte) bir kap içinde onları kurtarmak Eğer bir yerde senin konuları kaydetmek ve adil artırmak gelmez çünkü bu mümkün değil işaretçi kaydetmeden new boost::thread kullanmak istemiyorsanız, sadece, Ancak

for(iterator it = ctn.begin(); it != ctn.end(); ++it){ 
    if(it->get_id() == join_thread_id){ 
     it->join(); 
     break; 
    }   
} 

gibi bir şey kullanabilirsiniz herhangi bir otomatik defter tutma işlevi sağlamaz.

1. Uyarı: Kimliği kaydetmek için boost::thread::id'u kullanmanız gerektiğini unutmayın.
2. Not: std::map<boost::thread::id,boost::thread*> bu tür işler için kullanışlı olabilir.

+1

veya 'find_if (begin (ctn), bitiş (ctn), [join_thread_id] (yineleyici) {return it-> get_id() == join_thread_id;}); –

+0

Çok fazla iş parçacığı varsa, harita daha iyi değil mi? Bunu aklımda performansla soruyorum. –

+0

@ AdriC.S .: Bir çok şeyin anlamına bağlıdır. Bir harita argüman sayısı (alt doğrusal arama karmaşıklığı) ile güzel bir şekilde ölçeklendirilir, ancak gerçek öğelerin sayısına bağlı olarak, küçük bir vektör küçük bir haritayı geride bırakabilir. –

İlgili konular