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