[英]Why would a Thread aquire more than one permit of a semaphore?
如果線程通過調用acquire()
僅獲取一個許可就足以訪問共享資源,那么為什么要調用acquire(int permits)
呢? 你能舉一個使用acquire(int permits)
的例子嗎?
允許多個實例的任何資源:許可證服務器可能只允許 5 個同時用戶 - 因此理論上可以使用許可 = 5 的信號量(以及容忍多個請求線程)。 第 6 個許可證請求將無法獲得,直到一個被釋放。
想象一下,有一些通信協議以異步方式將可變長度消息傳輸到服務器,並且由於某種原因或其他原因,不希望有超過“N”千字節的未答復消息。 也許這是某種公平的事情。
// Imagine a 'Message' has a request and
// an eventual response
final int MAX_OUTSTANDING_KB = 999;
Semaphore sema = new Semaphore(MAX_OUTSTANDING_KB);
void sendRequest(Message m) {
int len = m.requestLength();
int permits = (len + 1023) / 1024; // round up
m.setPermits(permits); // remember for release
sema.acquire(permits); // possible wait here
transmitBytes(m.requestBuffer());
}
void responseReceived(Message m) {
sema.release(m.getPermits());
process(m.responseBuffer());
}
這有點做作,但你應該明白。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.