On Sunday, 14 November 2021 at 21:35:36 UTC, Ali Çehreli wrote:
>Dünkü sohbette baktığımız bir programı geliştirdim. Birden fazla işçinin aynı değişkeni arttırdığı durumda kullanıbilecek yöntemleri karşılaştırıyor.
Örnek çıktı:
--- deneme.korumasız ---
Süre: 36 msecs
Sonuç HATALI: 3,235,173 != 10,000,000
--- deneme.korumalı ---
Süre: 1,352 msecs
Sonuç doğru.
--- deneme.atomicOpİle ---
Süre: 181 msecs
Sonuç doğru.
--- deneme.casİle ---
Süre: 849 msecs
Sonuç doğru.
// ------------------------------------
// Çok sayıda işçi bu değişkeni degiştirecek
shared(int) paylaşılan;
void main() {
import std.meta;
import std.traits;
alias işlevler = AliasSeq!(korumasız, korumalı, atomicOpİle, casİle);
foreach (işlev; işlevler) {
enum isim = fullyQualifiedName!işlev;
dene(isim, &işlev);
}
}
Çok güzel bir örnek olmuş hocam! Özellikle AliasSeq ile harika. Tek anlamadığım bir şey var; o da işçiBaşınaArtış değeri nasıl oluyor da 4 işleve size_t artış
vasaıtasıyla aktarılıyor! Sanırım spawn()'nın 2. parametresi değil mi?
Dcoder ile bendeki sonuçlar şöyle:
- dmd shared.d -ofmain.out
- ./main.out
--- shared.korumasız ---
[bekliyorum]
Süre: 195 msecs
Sonuç HATALI: 3,399,470 != 10,000,000
--- shared.korumalı ---
[bekliyorum]
Süre: 2,197 msecs
Sonuç doğru.
--- shared.atomicOpİle ---
[bekliyorum]
Süre: 919 msecs
Sonuç doğru.
--- shared.casİle ---
[bekliyorum]
Süre: 1,501 msecs
Sonuç doğru.