Semafor Türleri

  • İsimlendirilmiş (Named) Semafor

  • Bu tipteki semaforlar, tanımlanan bir isim üzerinden farklı process'ler arasında kullanılabilirler.

  • İsimlendirilmemiş (Un-Named) Semafor

  • Atanmış bir ismi olmayan ancak ortak bir bellek bölgesinde yer alan semafor tipidir.

  • Thread'ler arasında kullanılmak istendiğinde, heap'tan alınmış veya global olarak tanımlanmış değişkenler içerisinde tutulur.

  • Process'ler arasında kullanılmak istendiğinde "shared memory" yöntemleriyle process'ler arasında erişilebilen ortak bellek bölgesinde tutulur.

İsimlendirilmiş (Named) Semafor Kullanımı

Tipik kullanımı şu şekildedir:

  • sem_open() ile semafor oluşturulur veya kullanım için açılır

  • sem_post() ile semaforun değeri artırılırken sem_wait() ile semaforun azaltılır

  • sem_getvalue() ile o anki değeri öğrenilir

  • sem_close() ile semafore erişim iptal edilir

  • sem_unlink() ile semafor tamamen silinmek üzere işaretlenir, semaforu kullanan tüm process'ler sem_close() yaptıktan sonra silme gerçekleşir.

sem_open

  • Yeni bir isimli semafor oluşturmak veya varolana erişebilmek için kullanılır.

  • Eğer yeni bir semafor oluşuyorsa, semafora erişim izni için gerekli bit maskesi ve semaforun ilk değeri de parametre olarak verilir.

  • Burada kullanılan bit maskesi, dosya işlemlerinde kullanılanlarla aynıdır.

  • Semaforun oluşturulması ve ilk değerinin atanması işlemi atomik olarak gerçekleşir.

  • Fonksiyon geri dönüş değeri olarak sem_t * şeklinde bir adres döndürür.

  • Hata durumunda bu değer SEM_FAILED'e eşit olur.

  • Başarılı durumda /dev/shm dizini altında semaforun referansı oluşur.

sem_close

  • Bir süreç semafor oluşturduğunda, çekirdek tarafından ilgili sürecin semafor ilişkisi kurulur.

  • sem_close fonksiyonu ile çağrıldığı sürecin ilgili semaforla ilişkisi kesilir.

  • İlgili semafor için kullanıldığı süreç sayısı sayacı bir azaltılır.

  • Tüm isimlendirilmiş semaforlar, ilgili süreç sonlandığında veya exec çağrısıyla yeni bir uygulama belleğe yüklendiğinde, yukarıdaki işlem çekirdek tarafından otomatik yapılır.

  • Bir semaforu yok etmek için sem_unlink fonksiyonu kullanılır.

  • Bu fonksiyonla ilgili semaforun, kullanımda olan tüm süreçler tarafından kapatıldığında otomatik olarak silinmesi istendiğini belirtmiş oluruz.

  • İlgili tüm süreçler tarafından semafor kullanımı sonlandırıldığında, semafor yok edilir ve /dev/shm altındaki dosya referansı da silinir.

Örnek: Semafor Oluşturma

Last updated

Was this helpful?