Thread overview
<Condition Variable>
Mar 03, 2018
hsencan
Mar 04, 2018
hsencan
March 03, 2018

Merhaba,

Ben thread pool yazan bir kişinin videosunu izliyordum <Condition_Variable> include ettiğini gördüm. Ve ne için kullandığını anlamadım.

İkinci sorum ise 'noexcept' keywordu ne işe yarıyor ?

İyi akşamlar

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 04, 2018

Alıntı (acehreli):

>

'bitti = true' işleminin atomic olmamasıdır.

Cevabınız için teşekkürler hocam. Peki atomic demişsiniz atomic olması ne demek oluyor ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 03, 2018

Bazen bir iş parçacığı belirli bir değişkenin değerinin değişmiş olmasına göre davranmak isteyebilir:

   while (!bitti) {
       // Bir şeyler yap
   }

Eğer 'bitti' sıradan bir değişkense, diğer iş parçacığı ona 'true' atayarak bu döngünün kesinlikle bir kere daha dönmemesini sağlayamaz. Bunun nedeni, diğer taraftaki 'bitti = true' işleminin atomic olmamasıdır.

Sıradan değişken yerine condition_variable olduğunda ise yazma ve okuma işlemleri aynı anda olamaz. Birisi true atamaya karar verdiğinde öteki okumadan önce yazma işleminin bitmesini bekler. Böylece, yarış hali ortadan kalkmış olur.

noexcept, kodun hata atmadığını bildirir. Hem derleyicinin hem de programcının işine yarayabilir. D'nin nothrow'u için şunları yazmışım:

http://ddili.org/ders/d/islevler_diger.html#ix_islevler_diger.nothrow

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 04, 2018

Galiba yanlış terim kullanmışım ama atomic, "kesintiye uğratılmadan yapılan" demek. Örneğin, bir veri tabanı programının "şu iki toblodaki şu iki değeri değiştir" gibi bir olanağı varsa, bu olanağın atomic olması, o iki değişimin kesintiye uğratılmadan gerçekleşmesi anlamına gelir.

İş parçacığı konusunda şurada yazdıklarımla aynı fikirdeyim: :)

Bir alıntı:

http://ddili.org/ders/d/es_zamanli.html

Alıntı:

>

İşletim sistemi iş parçacıklarını önceden kestirilemeyecek anlarda duraksatır ve tekrar başlatır. Bunun sonucunda örneğin aşağıdaki kadar basit işlemler bile bir süre yarım kalmış olabilirler:

++i;

Yukarıdaki işlem aslında üç adımdan oluşur: Değişkenin değerinin okunması, değerin arttırılması ve tekrar değişkene atanması. İşletim sisteminin bu iş parçacığını duraksattığı bir anda bu adımlar sonradan devam edilmek üzere yarım kalmış olabilirler.

condition_variable'daki durum ise daha çok şöyle açıklanabilir: "bu değişkeni değiştirmeden önce onu okumakta olan kimse olmadığından emin ol". Yani, iş parçacığı kilit olayından bahsediliyor. Bu değişkenin kilidini eline geçiren değiştirirken başkaları okuyamıyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]