1.一種生產(chǎn)者消費者模式優(yōu)化方法,其特征在于,包括:
將當前緩沖區(qū)中已寫滿數(shù)據(jù)的區(qū)域長度以及空閑的區(qū)域長度分別賦值給預(yù)設(shè)的信號量full和信號量empty;
若生產(chǎn)者進程嘗試向所述緩沖區(qū)中寫入新數(shù)據(jù),則對信號量empty和預(yù)設(shè)的信號量mutex進行判斷,并根據(jù)判斷結(jié)果決定是否允許生產(chǎn)者進程向所述緩沖區(qū)寫入新數(shù)據(jù);
若消費者進程嘗試從所述緩沖區(qū)中取出數(shù)據(jù),則對信號量full和信號量mutex進行判斷,并根據(jù)判斷結(jié)果決定是否允許消費者進程從所述緩沖區(qū)中取出數(shù)據(jù);
其中,若信號量mutex為1,則表示當前所述緩沖區(qū)未被任何進程占用,若信號量mutex為0,則表示當前所述緩沖區(qū)已被生產(chǎn)者進程或消費者進程占用。
2.根據(jù)權(quán)利要求1所述的生產(chǎn)者消費者模式優(yōu)化方法,其特征在于,所述對信號量empty和預(yù)設(shè)的信號量mutex進行判斷,并根據(jù)判斷結(jié)果決定是否允許生產(chǎn)者進程向所述緩沖區(qū)寫入新數(shù)據(jù)的過程,包括:
判斷當前信號量empty是否大于0,并且判斷信號量mutex是否為1;
如果當前信號量empty大于0,并且信號量mutex為1,則將信號量mutex設(shè)為0,并通過生產(chǎn)者進程將新數(shù)據(jù)寫入所述緩沖區(qū),在本次數(shù)據(jù)寫入操作結(jié)束之后將信號量mutex重新設(shè)為1;
如果當前信號量empty為0和/或信號量mutex為0,則禁止生產(chǎn)者進程向所述緩沖區(qū)中寫入新數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的生產(chǎn)者消費者模式優(yōu)化方法,其特征在于,
在生產(chǎn)者進程每向所述緩沖區(qū)寫入一個新數(shù)據(jù)的過程之前,均包括:
將當前信號量empty的具體數(shù)值減1;
在生產(chǎn)者進程每向所述緩沖區(qū)寫入一個新數(shù)據(jù)的過程之后,均包括:
將當前信號量full的具體數(shù)值加1。
4.根據(jù)權(quán)利要求1至3任一項所述的生產(chǎn)者消費者模式優(yōu)化方法,其特征在于,所述對信號量full和信號量mutex進行判斷,并根據(jù)判斷結(jié)果決定是否允許消費者進程從所述緩沖區(qū)中取出數(shù)據(jù)的過程,包括:
判斷當前信號量full是否大于0,并且判斷信號量mutex是否為1;
如果當前信號量full大于0,并且信號量mutex為1,則將信號量設(shè)為0,并通過消費者進程從所述緩沖區(qū)中取出數(shù)據(jù),在本次數(shù)據(jù)取出操作之后將信號量mutex重新設(shè)為1;
如果當前信號量full為0和/或信號量mutex為0,則禁止消費者進程從所述緩沖區(qū)中取出數(shù)據(jù)。
5.根據(jù)權(quán)利要求4所述的生產(chǎn)者消費者模式優(yōu)化方法,其特征在于,
在消費者進程每從所述緩沖區(qū)取出一個數(shù)據(jù)的過程之前,均包括:
將當前信號量full的具體數(shù)值減1;
在消費者進程每從所述緩沖區(qū)取出一個數(shù)據(jù)的過程之后,均包括:
將當前信號量empty的具體數(shù)據(jù)值加1。
6.一種生產(chǎn)者消費者模式優(yōu)化系統(tǒng),其特征在于,包括:
信號量賦值模塊,用于將當前緩沖區(qū)中已寫滿數(shù)據(jù)的區(qū)域長度以及空閑的區(qū)域長度分別賦值給預(yù)設(shè)的信號量full和信號量empty;
生產(chǎn)者管理模塊,用于當生產(chǎn)者進程嘗試向所述緩沖區(qū)中寫入新數(shù)據(jù),則對信號量empty和預(yù)設(shè)的信號量mutex進行判斷,并根據(jù)判斷結(jié)果決定是否允許生產(chǎn)者進程向所述緩沖區(qū)寫入新數(shù)據(jù);
消費者管理模塊,用于當消費者進程嘗試從所述緩沖區(qū)中取出數(shù)據(jù),則對信號量full和信號量mutex進行判斷,并根據(jù)判斷結(jié)果決定是否允許消費者進程從所述緩沖區(qū)中取出數(shù)據(jù);
其中,若信號量mutex為1,則表示當前所述緩沖區(qū)未被任何進程占用,若信號量mutex為0,則表示當前所述緩沖區(qū)已被生產(chǎn)者進程或消費者進程占用。
7.根據(jù)權(quán)利要求6所述的生產(chǎn)者消費者模式優(yōu)化系統(tǒng),其特征在于,所述生產(chǎn)者管理模塊,包括:
第一判斷單元,用于當生產(chǎn)者進程嘗試向所述緩沖區(qū)中寫入新數(shù)據(jù),則判斷當前信號量empty是否大于0,并且判斷信號量mutex是否為1;
第一生產(chǎn)者管理單元,用于當所述第一判斷單元判斷出當前信號量empty大于0,并且信號量mutex為1,則將信號量mutex設(shè)為0,并通過生產(chǎn)者進程將新數(shù)據(jù)寫入所述緩沖區(qū),在本次數(shù)據(jù)寫入操作結(jié)束之后將信號量mutex重新設(shè)為1;
第二生產(chǎn)者管理單元,用于當所述第一判斷單元判斷出當前信號量empty為0和/或信號量mutex為0,則禁止生產(chǎn)者進程向所述緩沖區(qū)中寫入新數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的生產(chǎn)者消費者模式優(yōu)化系統(tǒng),其特征在于,
所述第一生產(chǎn)者管理單元在生產(chǎn)者進程每向所述緩沖區(qū)寫入一個新數(shù)據(jù)的過程之前,均將當前信號量empty的具體數(shù)值減1,以及在生產(chǎn)者進程每向所述緩沖區(qū)寫入一個新數(shù)據(jù)的過程之后,均將當前信號量full的具體數(shù)值加1。
9.根據(jù)權(quán)利要求6至8任一項所述的生產(chǎn)者消費者模式優(yōu)化系統(tǒng),其特征在于,所述消費者管理模塊,包括:
第二判斷單元,用于當消費者進程嘗試從所述緩沖區(qū)中取出數(shù)據(jù),則判斷當前信號量full是否大于0,并且判斷信號量mutex是否為1;
第一消費者管理單元,用于當所述第二判斷單元判斷出當前信號量full大于0,并且信號量mutex為1,則將信號量設(shè)為0,并通過消費者進程從所述緩沖區(qū)中取出數(shù)據(jù),在本次數(shù)據(jù)取出操作之后將信號量mutex重新設(shè)為1;
第二消費者管理單元,用于當所述第二判斷單元判斷出當前信號量full為0和/或信號量mutex為0,則禁止消費者進程從所述緩沖區(qū)中取出數(shù)據(jù)。
10.根據(jù)權(quán)利要求9所述的生產(chǎn)者消費者模式優(yōu)化系統(tǒng),其特征在于,
所述第一消費者管理單元在消費者進程每從所述緩沖區(qū)取出一個數(shù)據(jù)的過程之前,均將當前信號量full的具體數(shù)值減1,以及在消費者進程每從所述緩沖區(qū)取出一個數(shù)據(jù)的過程之后,均將當前信號量empty的具體數(shù)據(jù)值加1。