29 Mart 2018 Perşembe

Semaphore Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.concurrent.Semaphore;
Açıklaması şöyle. Senkronizasyon için semaphore yine mutex ile beraber kullanılır.
Conceptually, 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.
Açıklaması şöyle
Semaphores are often used to restrict the number of threads than can access some (physical or logical) resource
constructor
İmzası şöyle.
Semaphore(int permits, boolean fair)
Açıklaması şöyle.
Generally, 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.
Örnek
Şö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
Şöyle yaparız.
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