Category: CPP

  • CPP 063 – Execution Policy

    std algoritmalarının çalışma şeklinin paralel, sequential veya vectorized olup olmadığını belirlemek için kullanıyoruz.

  • CPP 062 – packaged_task & async

    packaged_task bir callable objeyi paketleyip sonucunu daha sonra kulanabiliriz. Senkron ya da asekron olarak çalışabilir. Eğer aynı thread de ise sekron olarak çalışır: Farklı thread’de asekron olarak da çalıştırabiliriz: packaged_task şablonu: Async packaged_task ile aşağı yukarı aynı işi yapıyor ama daha high level diyebiliriz. Sekron ya da asekron çalışabilir: future objesi implicitly olarak thread join…

  • CPP 060 – Thread Synchronization

    Progress Bar Bir fetcher thread ve bir progress bar thread’i arasındaki sekronizasyonu sağlamak için mutex ve flaglar(data_ready ve complete) kullandık. Threadlerin yaptıklarını özetlemek gerekirse: Fetcher thread Progres bar thread İşler bittince completed flag ile programdan çıkış yapıyoruz. Gördüğünüz üzere bu yaklaşım bu işi yapmak için en iyi yaklaşım değil. Çünkü bir çok yerde lock unlock…

  • CPP 059 – Dead Lock & Live Lock

    Dead Lock A devam edebilmek için B ye, B de devam edebilmek için doğrudan ya da dolayı yoldan A ya ihtiyacı varsa bu bir dead lock oluyor. Live Lock Live lock da tıpkı deadlock gibidir ama halen işlemin devam ettiğine dair bir hayat belirtisi vardır:

  • CPP 058 – Working With Shared Data

    Critical Section Data race’in gerçekleşebileceği bölgeye critical section diyoruz. Yani kritik bölge, bir kaza/bir yanlışın çıkabileceği alan. Aşağıdaki kodda brute force bir çarpma işlemi yapıyoruz. 20 farklı thread aynı değişkeni 10’000’er defa ++(increment) ediyor. sonuç 200’000 olmalı. Fakat kritik bölgeye dikkat etmediğimizde yanlış sonuç elde ediyoruz: Bu koddaki kritik bölge: Mutex Mutual exclusive’in kısaltması. 4…

  • CPP 057 – Thread Giriş

    Thread ID sleep_for() belirtilen süre kadar thread i uyutur: Thread Object Thread RAII idiomunu implemente etmiştir ve sadece move edilebilir: Return ederken bizim yerimize compiler optimize ediyor: Exceptions Thread içinde handle edlimeli. If I have a C++11 program running two threads, and one of them throws an unhandled exception, what happens? Will the entire program…

  • CPP 056 – Concurency

    Concurency Nedir? Concurency(eşzamanlılık) aynı anda birden fazla görevin yerine getirilmesidir. Maillerinizi okurken, arka planda çalan müzik bunun bir örneğidir. Bilgisayarımızda aynı anda yüzlerce hatta binlerce ufak program/kod parçası aynı anda çalışıyor. Yeni nesil mimarilerin hepsi(?) çok çekirdekli ama eski tek çekirdekli bilgisayarlarda bile bizler farklı işleri aynı anda yapabiliyorduk. Bu durumda eşzamanlılık kavramı sadece farklı…

  • CPP 054 – Friends

    Sınıfın dışındaki fonksiyonlar sınıfın içindeki private ve protected alandaki değişkenlere erişemez. Eğer erişmesini istiyorsak friend keyword’ünü kullanıyoruz. A friend function is a function that isn’t a member of a class but has access to the class’s private and protected members. Friend functions aren’t considered class members; they’re normal external functions that are given special access…

  • CPP 053 – Static Members

    Static değişkenler ve fonksiyonlar nesnelerden bağımsız olarak sınıfa aittir. Bunlara erişmek ve kullanmak için herhangi bir nesneye ihtiyacımız yoktur. Nesnelerden bağımsız olduğu için tüm nesneler aynı değişkene/fonksiyona erişebilir.

  • CPP 052 – Const Objects

    Initialize edildikten sonra bir daha değer ataması yapılamayan sabit değişkenler oluşturmak için kullanıyoruz: Yani kısacası ömrü boyunca aynı değeri taşır. Herhangi bir sınıfa ait constant bir nesne oluşturabiliriz: Bu kodda Player sınıfına ait constant bir nesne oluşturduk. 24. satırdaki set_name() metoduna yaptığımız çağrı bize hata verecektir. Çünkü sabit bir nesne adı üstüne değiştirilemez. Peki neden…

  • CPP 051 – Copy & Move && Constructors

    Nesnenin kopyalandığı durumlarda copy constructor çağrılıyor. Move constructor ise kopyalama işlemi yerine var olan nesneyi yeni nesneye atıyor. Yani bir nevi bir yer değiştirme durumu söz konusu oluyor. Copy Constructor Hangi durumlarda çağrılabilir: https://www.geeksforgeeks.org/when-is-a-copy-constructor-called-in-cpp Kısacası fonksiyonun pass by value ile parametre alması, fonksiyonun değer döndürmesi esnasında, var olan nesneden yeni bir nesne oluşturma durumunda bu…

  • CPP 050 – Constructors

    Daha önce yapıcılar ve yıkıcılar dersinde zaten bahsetmiştik. Şimdi detaylara bakalım. Contstructor Nedir? Default Constructor A default constructor is a constructor which can be called with no arguments. https://en.cppreference.com/w/cpp/language/default_constructor Overloading Constructors Tıpkı fonksiyonları overload yaptığımız gibi constructor’ları da overload yapabiliyoruz. Member Initializer List Sınıfa ait değişkenlere değer atarken şuana kadar hep constructor fonksiyonunun gövdesinde yaptık.…

  • CPP 049 – .h & .cpp

    Şuana kadar farklı sınıfları hep aynı dosyanın içine yazıp öyle çalıştırdık. Fakat bu ölçeklenebilir bir davranış değil. Onbinlerce yüzbinlerce satır kodun tek bir dosyada olması sıkıntılı bir durum. Bu sebeple bunları ayrı dosyaların içine nasıl yazabileceğimizi göstereceğiz. Şimdi main.cpp de şöyle bir kodumuz olsun: Person isminde bir sınıf oluşturduk sonra main() fonksiyonunda 2 adet obje…

  • CPP 048 – Virtual Functions

    Aşağıda A ve B olmak üzere iki sınıf var. B, A’dan miras alıyor. Daha sonra her ikisine de f() fonksiyonunu ekliyoruz. A türüne ait bir pointer oluşturup sırasıyla a ve b nesnelerini atayıp f() fonksiyonunu çağırınca Base class’a ait f() fonksiyonu çalıştı. A sınıfına ait bir nesne için A::f() basması gayet mantıklı fakat B sınıfına…