Semafor (programlama)

Semafor, birden fazla programın veya iş parçacığının aynı anda çalıştığı durumlarda, ortak kaynaklara erişimi sıraya koymak ve düzenlemek için kullanılan bir kontrol mekanizmasıdır. Çoklu iş parçacıkları arasında çakışmayı önlemek, kritik bölgeleri korumak ve işlemler arasında düzen sağlamak amacıyla kullanılır. Programlama dillerinde ve işletim sistemlerinde sıkça kullanılan temel senkronizasyon yöntemlerinden biridir.

 Tarihçesi 
Semafor kavramı, ilk kez 1965 yılında Hollandalı bilgisayar bilimcisi Edsger W. Dijkstra tarafından ortaya atılmıştır. Dijkstra, bilgisayar programlarında birden fazla işlemin aynı anda çalıştığı durumlarda, veri çakışmalarını önlemek için bu yöntemi geliştirmiştir.

Başlangıçta P ve V adını verdiği iki işlemle semaforu tanımlamıştır. Bu işlemler, kaynaklara sırayla ve güvenli bir şekilde erişilmesini sağlar. Daha sonra bu işlemler, wait() ve signal() adlarıyla programlama dillerine girmiştir.

Semaforlar, zamanla birçok işletim sisteminde kullanılmaya başlanmış ve çoklu işlem veya iş parçacığı ile çalışan programlarda yaygın bir senkronizasyon aracı haline gelmiştir.

 Semafor türleri 

 Saymalı semafor 
Bu semafor, bir sayı tutar. Aynı anda birden fazla işlemin veya iş parçacığının kaynağı kullanmasına izin verir. Örneğin, 3 değerine sahip bir saymalı semafor, aynı anda 3 kişinin bir yazıcıyı kullanmasına izin verir.

İkili semafor

Bu semafor sadece 0 veya 1 değerini alır. Yani, kaynağa aynı anda sadece bir kişi erişebilir. Bu, bir tür kilit gibi çalışır.

 Semaforların kullanım alanları 
Semaforlar, çoklu işlem ve çoklu iş parçacığı ortamlarında, paylaşılan kaynaklara eşzamanlı erişimi düzenlemek amacıyla kullanılır. Örneğin, bir yazıcı gibi tek bir kaynağa aynı anda yalnızca bir iş parçacığının erişebilmesi semaforlar sayesinde sağlanır. Ayrıca, sınırlı sayıda eş zamanlı erişime izin verilen kaynaklarda (örneğin veritabanı bağlantıları), saymalı semaforlar kullanılarak erişim kontrolü gerçekleştirilir.

Semaforlar, kritik bölgelerin korunmasında kritik rol oynar; bu bölgelerde aynı anda yalnızca bir iş parçacığı çalışabilir. Ayrıca, üretici-tüketici ve okuyucu-yazıcı gibi klasik senkronizasyon problemlerinde, veri tutarlılığının sağlanması ve yarış koşullarının önlenmesi için semaforlar sıklıkla tercih edilir.

 Kaynakça 

Kategori:Senkronizasyon
Kategori:Koşut zamanlılık
Kategori:Paralel hesaplama
Kategori:Bilgisayar aracılı iletişim
Kategori:Edsger W. Dijkstra
Kategori:Hollandalı icatları