摘要:對于信號量,可以認(rèn)為是一個倉庫,有兩個概念,容量和當(dāng)前的貨物個數(shù)。創(chuàng)建信號量,設(shè)置容量,先有操作,才能操作。構(gòu)造函數(shù)需要指定信號量的容量,可選指定是否公平,以防止低優(yōu)先級線程的饑餓狀態(tài)。
信號量是操作系統(tǒng)提供給用戶使用的一種機(jī)制,幫助用戶進(jìn)程協(xié)調(diào)使用資源,用戶編程的時候可以直接調(diào)用,不必自己設(shè)計。計算機(jī)對信號量只能執(zhí)行 wait和signal這兩種原子(sychronized)操作,即申請和釋放信號量時無法被打斷。
信號量多用于進(jìn)程間的同步與互斥,簡單的說一下同步和互斥的意思
同步:指散步在不同任務(wù)之間的若干程序片斷,它們的運行必須嚴(yán)格按照規(guī)定的某種先后次序來運行,這種先后次序依賴于要完成的特定的任務(wù)。
互斥:不同任務(wù)之間的若干程序片斷,當(dāng)某個任務(wù)運行其中一個程序片段時,其它任務(wù)就不能運行它們之中的任一程序片段,只能等到該任務(wù)運行完這個程序片段后才可以運行
競爭:當(dāng)并發(fā)進(jìn)程競爭使用同一個資源的時候,我們就稱為競爭進(jìn)程
顯然同步是一種更為復(fù)雜的互斥,而互斥是一種特殊的同步。也就是說互斥是兩個任務(wù)之間不可以同時運行,他們會相互排斥,必須等待一個線程運行完畢,另一個才能運行,而同步也是不能同時運行,但他是必須要安照某種次序來運行相應(yīng)的線程(也是一種互斥)!因此互斥具有唯一性和排它性,但互斥并不限制任務(wù)的運行順序,即任務(wù)是無序的,而同步的任務(wù)之間則有順序關(guān)系。
對于信號量,可以認(rèn)為是一個倉庫,有兩個概念,容量和當(dāng)前的貨物個數(shù)。
P操作從倉庫拿貨,如果倉庫中沒有貨(if(signal==0)),線程一直等待(wait),直到V操作,往倉庫里添加了貨物,然后從倉庫拿貨(--signal)為了避免P操作一直等待下去,會有一個超時時間。
V操作,如果倉庫滿了(if(signal==bound)),線程等待(wait),直到有P操作,從倉庫中拿走貨物,有空的位置,往倉庫送貨(++signal)。
創(chuàng)建信號量,設(shè)置容量,先有V操作,才能P操作。
P操作:貨物個數(shù)減1,減過之后,貨物個數(shù)大于等于0,說明已經(jīng)拿到貨物,線程繼續(xù)。否者線程阻塞。
V操作:貨物個數(shù)加1,加過之后,貨物個數(shù)小于等于容量,說明添加成功,線程繼續(xù)。否者線程阻塞。
JDK1.5已經(jīng)實現(xiàn)了Semaphore類,無須再自己實現(xiàn)。
構(gòu)造函數(shù)需要指定信號量的容量,可選指定是否公平,以防止低優(yōu)先級線程的饑餓狀態(tài)。
Semaphore(int permits) 創(chuàng)建具有給定的許可數(shù)和非公平的公平設(shè)置的 Semaphore。
Semaphore(int permits, boolean fair) 創(chuàng)建具有給定的許可數(shù)和給定的公平設(shè)置的 Semaphore。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/68634.html
摘要:有邊界的信號量語法創(chuàng)建一個新的有邊界信號量。是計數(shù)器的初始值,如果忽略,將默認(rèn)為信號量與有邊界的信號量的區(qū)別的工作方式與完全相同,但操作的次數(shù)不能超過的操作次數(shù)。信號量與互斥鎖的微妙差別信號量可用于發(fā)送信號。 上一篇文章:Python線程專題4:Timer對象、Lock對象、Rlock對象下一篇文章:Python線程專題6:事件 信號量與有邊界的信號量 信號量是一個基于計數(shù)器的同步原...
閱讀 2481·2021-11-19 09:40
閱讀 3680·2021-10-12 10:12
閱讀 1944·2021-09-22 15:04
閱讀 2963·2021-09-02 09:53
閱讀 853·2019-08-29 11:03
閱讀 1179·2019-08-28 18:11
閱讀 1785·2019-08-23 15:28
閱讀 3648·2019-08-23 15:05