25 Ocak 2011, Salı
C 0 x hayır semafor var? Nasıl iş parçacıklarını eşitleme?
Merhaba,
C 0 x semafor olmadan gelecek doğru mu? Zaten stackoverflow bazı sorular semafor kullanımı ile ilgili. Onları (posıx semafor) her zaman bir iş parçacığı başka bir iş parçacığı bazı olay bekleyelim kullanıyorum:
void thread0(...)
{
doSomething0();
event1.wait();
...
}
void thread1(...)
{
doSomething1();
event1.post();
...
}
Bir dışlama ile yaparım, eğer:
void thread0(...)
{
doSomething0();
event1.lock(); event1.unlock();
...
}
void thread1(...)
{
event1.lock();
doSomethingth1();
event1.unlock();
...
}
Sorun: Bu çirkin ve değil Garanti Bu thread1 kilitler, zaman uyumu ilk (Verilen aynı takılacaktır kilitlemek ve kilidini açmak için bir dışlama, sen de mi kilit event1 önce thread0 ve thread1 başladı).
Bu yüzden destek semafor yok bu yana, yukarıda elde etmek için en kolay yolu nedir?
CEVAP
25 Ocak 2011, Salı
Kolayca bir dışlama ve durum değişken oluşturabilirsiniz:
#include <boost/thread/condition.hpp>
#include <boost/thread/mutex.hpp>
class semaphore
{
private:
boost::mutex mutex_;
boost::condition_variable condition_;
unsigned long count_;
public:
semaphore()
: count_()
{}
void notify()
{
boost::mutex::scoped_lock lock(mutex_);
count_;
condition_.notify_one();
}
void wait()
{
boost::mutex::scoped_lock lock(mutex_);
while(!count_)
condition_.wait(lock);
--count_;
}
};
Bunu Paylaş:
Nasıl no-ri-hayır-rdoc gem için varsay...
Nasıl Android Evet/Hayır iletişim kutu...
Bir ileti kutusu oluşturmak ve; " Evet...
Nasıl oluşturma "Hayır Etkinleşti...
Hayır geliştirici dizin /Geliştirici&q...