Giriş
Şu satırı dahil ederiz.
Constructor
Şöyle yaparız.
Spinlock yerine kullanılabilir. Nesne false ile başlar. While döngüsüne ilk gelen değeri true atar, eski değer olan false while'dan çıkmamıza sebep olur. İşimiz bitinceye kadar diğer thread'ler true değer atasa bile eski değer de halan true olduğu için döngü beklerler. Biz işimizi bitirip false değerini atayınca arkadan gelen bir başka thread döngüye girebilir.
Exchange metodu yerine şöyle yaparız.
Thread pool'da kapatma bayrağı için kullanılabilir. Şöyle bir değişken tanımlarız.
Şu satırı dahil ederiz.
#include <atomic>
C++'ta atomic bool olarak kullanılabilecek iki sınıf var. Bunlar std::atomic_bool ve std::atomic_flagConstructor
Şöyle yaparız.
std::atomic<bool> consumerLock (false);
exchange metodu - spinlock içinSpinlock yerine kullanılabilir. Nesne false ile başlar. While döngüsüne ilk gelen değeri true atar, eski değer olan false while'dan çıkmamıza sebep olur. İşimiz bitinceye kadar diğer thread'ler true değer atasa bile eski değer de halan true olduğu için döngü beklerler. Biz işimizi bitirip false değerini atayınca arkadan gelen bir başka thread döngüye girebilir.
std::atomic<bool> consumerLock (false);
{ // the critical section
while (consumerLock.exchange(true)) { } // this is the spinlock
// do something useful
consumerLock = false; // unlock
}
load ve store - spinlock içinExchange metodu yerine şöyle yaparız.
std::atomic<bool> setup_ready(false);
{
// thread 1
while (!setup_ready.load()) std::this_thread::yield();
// do something
}
{
// thread 2
// perform some setup
setup_ready.store(true);
}
load ve store - flag içinThread pool'da kapatma bayrağı için kullanılabilir. Şöyle bir değişken tanımlarız.
std::atomic<bool> shutdown_flag;
Değişkeni şöyle ilkendiririz.shutdown_flag(false),
veyashutdown_flag.store(false);
veyashutdown_flag = false;
Daha sonra değişkeni şöyle kontrol ederiz.
while (!shutdown_flag.load())
{...}
operator = - flag için
load ve store ile aynıdır. Thread pool'da kapatma bayrağı için kullanılabilir.
Örnek
Şöyle bir değişken tanımlarız.
Örnek
Şöyle bir değişken tanımlarız.
std::atomic<bool> isRunning;
Değişkeni şöyle ilklendiririz.
isRunning = false;
while(isRunning) {
{...}
Hiç yorum yok:
Yorum Gönder