Giriş
Şu satırı dahil ederiz.
constructor
İmzası şöyle.
Şöyle yaparız. Böylece önce release() çağrısının yapılmasını şart koşarız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
import java.util.concurrent.Semaphore;
Açıklaması şöyle. Senkronizasyon için semaphore yine mutex ile beraber kullanılır.Açıklaması şöyleConceptually, a semaphore maintains a set of permits. Each acquire blocks if necessary until a permit is available, and then takes it. Each release adds a permit, potentially releasing a blocking acquirer. However, no actual permit objects are used; the Semaphore just keeps a count of the number available and acts accordingly.
Semaphores are often used to restrict the number of threads than can access some (physical or logical) resource
İmzası şöyle.
Semaphore(int
permits, boolean fair)
Açıklaması şöyle.ÖrnekGenerally, semaphores used to control resource access should be initialized as fair, to ensure that no thread is starved out from accessing a resource. When using semaphores for other kinds of synchronization control, the throughput advantages of non-fair ordering often outweigh fairness considerations.
Şöyle yaparız. Böylece önce release() çağrısının yapılmasını şart koşarız.
Semaphore sem = new Semaphore(0);
acquire metoduŞöyle yaparız.
semaphore.acquire();
acquire metodu - intŞöyle yaparız.
semaphore.acquire(2);
getQueueLength metodu
Örnek
Şöyle yaparız. Bu yöntem çok doğru mu bilmiyorum ama kabaca semaphore üzerinde bekleyen bir thread gelinceye kadar "busy spin" yapar.
public void waitSemaphore() {
while (semaphore.getQueueLength() > 0) {
}
}
release metodu
semaphore.release();
release metodu - intŞöyle yaparız.
semaphore.release(2);
tryAcquire metoduŞöyle yaparız.
if (semaphore.tryAcquire()) {...}
Hiç yorum yok:
Yorum Gönder