FORTRAN ve BASIC'in ilk günlerinde, esasen tüm programlar GOTO ifadeleriyle yazılmıştır. Sonuç spagetti koduydu ve çözüm yapılandırılmış programlama idi.
Benzer şekilde, işaretçiler programlarımızdaki özellikleri kontrol etmek zor olabilir. C ++ bol miktarda işaretçi ile başladı, ancak referansların kullanılması önerilir. STL gibi kütüphaneler bazı bağımlılıklarımızı azaltabilir. Daha iyi özelliklere sahip akıllı işaretçiler oluşturmak için deyimler ve bazı C ++ sürümleri referanslara ve yönetilen kodlara izin veriyor.
Kalıtım ve polimorfizm gibi programlama pratikleri sahnelerin ardında çok fazla işaretçi kullanır (tıpkı yapılı programlama gibi dal talimatlarıyla doldurulmuş kodlar üretir). Java gibi diller, işaretçileri ortadan kaldırır ve programcıların tüm yeni eşleşmeleri ve ifadelerini silmek üzere dinamik olarak ayrılmış verileri yönetmek için çöp toplama özelliğini kullanır.
Okumamda semafor kullanmayan çoklu işlem ve çoklu iş parçacıklı programlama örnekleri gördüm. Aynı şeyi farklı isimlerle mi kullanıyorlar veya kaynakları eşzamanlı kullanımdan korumanın yapılandırılmasında yeni yöntemler var mı?
Örneğin, çok çekirdekli işlemcilerle çok okuyuculu programlama için belirli bir sistem örneği OpenMP'dir. Çevreye dahil olmadığı anlaşılan semafor kullanılmadan aşağıdaki gibi kritik bir bölgeyi temsil eder.
th_id = omp_get_thread_num();
#pragma omp critical
{
cout << "Hello World from thread " << th_id << '\n';
}
Bu örnek aşağıdakilerden bir alıntıdır: http://en.wikipedia.org/wiki/OpenMP
Alternatif olarak, wait () ve signal () işlevlerine sahip semaforlar kullanılarak birbirlerinden benzer iplik korunması şöyle görünebilir:
wait(sem);
th_id = get_thread_num();
cout << "Hello World from thread " << th_id << '\n';
signal(sem);
Bu örnekte, işler oldukça basittir ve sadece basit bir inceleme wait () ve signal () çağrılarının eşleştiğini göstermek için yeterlidir ve çok sayıda eşzamanlılıkla bile iş parçacığı güvenliği sağlanır. Ancak, diğer algoritmalar daha karmaşıktır ve birçok iş parçacığı tarafından çağrılabilecek karmaşık koşullarla birden çok fonksiyona yayılmış çoklu semaforlar (hem ikili hem de sayma) kullanır. Kilitlenme oluşturmanın veya iş parçacığını güvenli hale getirememenin sonuçlarının yönetilmesi zor olabilir.
OpenMP gibi bu sistemler semaforlarla ilgili sorunları ortadan kaldırıyor mu?
Sorunu başka bir yere mi taşıdılar?
En sevdiğim semaforumu artık semafor kullanmamak için algoritma kullanarak nasıl değiştirebilirim?