lock ve mutex'in aksine senkronize erişimi tamamen bekletmek için değil sınırlandırmak için kullanılabilir denilebilir...sınırlı bir resource a sahipsiniz,aynı anda 3 thread'in bu kaynağa erişmesini istiyorsunuz daha fazlası sizin için bir sorun oluşturuyor..kodun o kısmını bütün thread'lerin kullanımına açmıyorsunuz,orada sayaca sahip bir lock kullanıyorsunuz..işte semaphore bu..
Semaforların amacı mutexlerin amacı ile aynıdır. Semaforlar mutexlerden farklı olarak birden fazla threadin aynı bölgeye girmesine izin verebilir. Mutexler semaforların iki durumlu özel halleri olarak düşünülebilir. Mutexler korudukları bölgeye sadece 1 threadin girmesine izin verirken, semaforlar korumalı bölgeye giren thread sayısını belli bir değerle sınırlamak için kullanılır... Semaforun korumalı alan için izin verdiği thread sayısına yazının geri kalan kısmında kontenjan diyelim
SemaforlarMutex Unix/Linux ve Win32 sistemlerinde thread tarafından ele geçirilen senkronizasyonnesnesidir. Oysa bazı durumlarda bir kritik koda tek bir kişi değil, örneğin n değişik kişiningirmesi istenebilir. Semaforlar bu bakımdan mutex nesnelerinin sayaçlı biçimleridir.Semaforlar aşağı yukarı tüm işletim sistemlerinde benzer kullanıma sahiptir. Semafora girmekile çıkmak biçiminde iki kavram vardır. Semaforların bir sayacı bulunur. Bu sayaç başlangıçtasemaforu yaratan kişi tarafından set edilir. Bir kod semafora girdiğinde sayaç azaltılır,çıktığında artırılır. Bir kod semafora girerken işletim sistemi semafor sayacına bakar. Sayaç0'dan büyükse girme hakkını elde eder ve sayaç bir eksiltilir. Sayaç 0 ise semafora girmekisteyen kod semafor içerisinde bloke edilir. Başka bir kod semafordan çıktığında sayaçartırılır. Bekleyen kodlardan en yüksek öncelikli olan kod semafora giriş sağlar.Böylecemutex'lerde olduğu gibi kritik koda sadece tek bir kişi değil, aynı anda n kişi girebilmektedir.