信號量sema =新的信號量(1);優先獲取信號量阻塞線程的方法?
創建一個信號量對象和默認初始化,唯一的一個許可證,當多個線程同時試圖獲取許可證時,必須更改只有一個線程可以訪問權限,那麼其他線程將在外面等待,當第一個線程釋放許可證,然後等待線程有權獲得許可證,或者它只是第一個到達並等待線程將有權 誰可以幫助我,我將非常感激
信號量sema =新的信號量(1);優先獲取信號量阻塞線程的方法?
創建一個信號量對象和默認初始化,唯一的一個許可證,當多個線程同時試圖獲取許可證時,必須更改只有一個線程可以訪問權限,那麼其他線程將在外面等待,當第一個線程釋放許可證,然後等待線程有權獲得許可證,或者它只是第一個到達並等待線程將有權 誰可以幫助我,我將非常感激
該類的構造函數op公正性參數接受公平性。當設置爲false時,該類對線程獲取許可的順序不作任何保證。特別是,barging是允許的,也就是說,調用
acquire()
的線程可以在已經等待的線程之前分配許可 - 邏輯上,新線程將自己置於等待線程隊列的頭部。當公平性設置爲真時,信號量保證調用任何acquire
方法的線程被選擇以按照它們對這些方法的調用的處理順序(先進先出; FIFO)獲得許可。請注意,FIFO排序必須適用於這些方法中的特定內部執行點。所以,一個線程可能在另一個線程之前調用acquire
,但是到達另一個線程之後的排序點,並且類似地從該方法返回。另外請注意,不計時的tryAcquire
方法不符合公平性設置,但會採取任何可用的許可證。
所以,你可以初始化二者之間Semaphore
不同的排序時選擇:
new Semaphore(1, true)
初始化,那麼當多個線程正在等待,那個叫acquire()
第一個線程將是第一個獲得許可證。也就是說,許可將以線程請求它們的順序給予線程。new Semaphore(1, false)
或equivalentlynew Semaphore(1)
初始化,然後每當一個線程調用acquire()
,它將成爲在第一線線程獲得許可。也就是說,當許可證變得可用時,最後一個調用acquire()
的線程將成爲接收它的第一個線程。
對不起,很難理解你在問什麼。這些中的任何一個與你的問題大致相同? 「當多個線程正在等待來自」Semaphore「的許可時,線程將以什麼順序接收它們?」 「如何配置類似'Semaphore'的東西,以便在多個線程等待許可時,某些線程將獲得更高的優先級?」 – Alden
@Alden我的意思是,默認情況下,被阻塞的線程是通過優先級獲取的信號量?你能理解 – wanghao
在那個評論中,我不理解「是信號量」還是「通過優先級獲取「。 – Alden