国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理方法及系統(tǒng)與流程

      文檔序號:11154646閱讀:513來源:國知局
      一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理方法及系統(tǒng)與制造工藝

      本發(fā)明涉及計算機軟件技術(shù)領(lǐng)域,特別涉及一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理方法及系統(tǒng)。



      背景技術(shù):

      目前,在傳統(tǒng)軟件技術(shù)的多生產(chǎn)者多消費者模式下,為了保證數(shù)據(jù)的正確性,需要引入互斥鎖,否則將會導(dǎo)致多線程同時訪問隊列數(shù)據(jù)而引起線程同時進入互斥區(qū)等問題。

      然而,在多生產(chǎn)者多消費者模式的實現(xiàn)過程中,互斥鎖的引入,將會導(dǎo)致在隊列訪問負載較大的情況下造成CPU效率低下甚至引發(fā)程序的死鎖等問題。

      綜上所述可以看出,如何在實現(xiàn)多生產(chǎn)者多消費者模式的過程中,保證軟件程序的穩(wěn)定性和執(zhí)行效率是目前有待解決的問題。



      技術(shù)實現(xiàn)要素:

      有鑒于此,本發(fā)明的目的在于提供一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理方法及系統(tǒng),能夠在實現(xiàn)多生產(chǎn)者多消費者模式的過程中,保證了軟件程序的穩(wěn)定性和執(zhí)行效率。其具體方案如下:

      一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理方法,包括:

      當多個生產(chǎn)者中的任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則利用std::atomic類型,判斷預(yù)設(shè)隊列當前是否符合入列條件,如果是,則將該新數(shù)據(jù)元素緩存至所述預(yù)設(shè)隊列,如果否,則禁止將該新數(shù)據(jù)元素緩存至所述預(yù)設(shè)隊列;

      當多個消費者中的任一消費者需要對所述預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則利用std::atomic類型,判斷所述預(yù)設(shè)隊列當前是否符合出列條件,如果是,則從當前所述預(yù)設(shè)隊列中提取出相應(yīng)的數(shù)據(jù)元素,并發(fā)送至相應(yīng)的消費者,以進行相應(yīng)的數(shù)據(jù)處理。

      可選的,所述判斷預(yù)設(shè)隊列當前是否符合入列條件的過程,包括:

      判斷所述預(yù)設(shè)隊列當前是否已經(jīng)存滿,如果否,則判定當前所述預(yù)設(shè)隊列符合入列條件,如果是,則判定當前所述預(yù)設(shè)隊列不符合入列條件。

      可選的,所述判斷所述預(yù)設(shè)隊列當前是否符合出列條件的過程,包括:

      判斷當前所述預(yù)設(shè)隊列中是否存在未處理的數(shù)據(jù)元素,如果是,則判定當前所述預(yù)設(shè)隊列符合出列條件,如果否,則判定當前所述預(yù)設(shè)隊列不符合出列條件。

      可選的,所述方法,還包括:

      對所述預(yù)設(shè)隊列進行實時監(jiān)視;

      若監(jiān)視到當前所述預(yù)設(shè)隊列中的剩余緩存空間容量小于預(yù)設(shè)容量閾值,則發(fā)出相應(yīng)的容量預(yù)警信息。

      可選的,所述預(yù)設(shè)隊列為環(huán)形緩沖區(qū)。

      本發(fā)明還相應(yīng)公開了一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理系統(tǒng),包括:

      入列管理模塊,用于當多個生產(chǎn)者中的任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則利用std::atomic類型,判斷預(yù)設(shè)隊列當前是否符合入列條件,如果是,則將該新數(shù)據(jù)元素緩存至所述預(yù)設(shè)隊列,如果否,則禁止將該新數(shù)據(jù)元素緩存至所述預(yù)設(shè)隊列;

      出列管理模塊,用于當多個消費者中的任一消費者需要對所述預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則利用std::atomic類型,判斷所述預(yù)設(shè)隊列當前是否符合出列條件,如果是,則從當前所述預(yù)設(shè)隊列中提取出相應(yīng)的數(shù)據(jù)元素,并發(fā)送至相應(yīng)的消費者,以進行相應(yīng)的數(shù)據(jù)處理。

      可選的,所述入列管理模塊,包括:

      第一判斷單元,用于當多個生產(chǎn)者中的任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則利用std::atomic類型,判斷所述預(yù)設(shè)隊列當前是否已經(jīng)存滿,如果否,則判定當前所述預(yù)設(shè)隊列符合入列條件,如果是,則判定當前所述預(yù)設(shè)隊列不符合入列條件;

      入列控制單元,用于當所述第一判斷單元判定當前所述預(yù)設(shè)隊列符合入列條件,則將該新數(shù)據(jù)元素緩存至所述預(yù)設(shè)隊列,當所述第一判斷單元判定當前所述預(yù)設(shè)隊列不符合入列條件,則禁止將該新數(shù)據(jù)元素緩存至所述預(yù)設(shè)隊列。

      可選的,所述出列管理模塊,包括:

      第二判斷單元,用于當多個消費者中的任一消費者需要對所述預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則利用std::atomic類型,判斷當前所述預(yù)設(shè)隊列中是否存在未處理的數(shù)據(jù)元素,如果是,則判定當前所述預(yù)設(shè)隊列符合出列條件,如果否,則判定當前所述預(yù)設(shè)隊列不符合出列條件;

      出列管理單元,用于當所述第二判斷單元判定當前所述預(yù)設(shè)隊列符合出列條件,則從當前所述預(yù)設(shè)隊列中提取出相應(yīng)的數(shù)據(jù)元素,并發(fā)送至相應(yīng)的消費者,以進行相應(yīng)的數(shù)據(jù)處理。

      可選的,所述數(shù)據(jù)管理系統(tǒng),還包括:

      隊列監(jiān)視模塊,用于對所述預(yù)設(shè)隊列進行實時監(jiān)視;

      容量預(yù)警模塊,用于當所述隊列監(jiān)視模塊監(jiān)視到當前所述預(yù)設(shè)隊列中的剩余緩存空間容量小于預(yù)設(shè)容量閾值,則發(fā)出相應(yīng)的容量預(yù)警信息。

      可選的,所述預(yù)設(shè)隊列為環(huán)形緩沖區(qū)。

      本發(fā)明中,適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理方法,包括:當多個生產(chǎn)者中的任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則利用std::atomic類型,判斷預(yù)設(shè)隊列當前是否符合入列條件,如果是,則將該新數(shù)據(jù)元素緩存至預(yù)設(shè)隊列,如果否,則禁止將該新數(shù)據(jù)元素緩存至預(yù)設(shè)隊列;當多個消費者中的任一消費者需要對預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則利用std::atomic類型,判斷預(yù)設(shè)隊列當前是否符合出列條件,如果是,則從當前預(yù)設(shè)隊列中提取出相應(yīng)的數(shù)據(jù)元素,并發(fā)送至相應(yīng)的消費者,以進行相應(yīng)的數(shù)據(jù)處理。

      可見,本發(fā)明在多生產(chǎn)者多消費者模式下,若任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則會利用std::atomic類型來判斷預(yù)設(shè)隊列當前是否符合入列條件,然后根據(jù)該判斷結(jié)果來決定是否允許將上新數(shù)據(jù)元素緩存至上述預(yù)設(shè)隊列,若任一消費者試圖對上述預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則會利用std::atomic類型來判斷上述預(yù)設(shè)隊列當前是否符合出列條件,如果是,則會從上述預(yù)設(shè)隊列中提取出待處理數(shù)據(jù),然后發(fā)送至相應(yīng)的消費者以進行相應(yīng)的數(shù)據(jù)處理。由于std::atomic類型對象能夠在不同的線程訪問中避免數(shù)據(jù)競爭事件的發(fā)生,從而使得上述基于std::atomic類型的數(shù)據(jù)訪問過程能夠穩(wěn)定可靠地進行,并具有較高的執(zhí)行效率。也即,本發(fā)明能夠在實現(xiàn)多生產(chǎn)者多消費者模式的過程中,保證了軟件程序的穩(wěn)定性和執(zhí)行效率。

      附圖說明

      為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。

      圖1為本發(fā)明實施例公開的一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理方法流程圖;

      圖2為本發(fā)明實施例公開的一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)入列管理方法流程圖;

      圖3為本發(fā)明實施例公開的一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)出列管理方法流程圖;

      圖4為本發(fā)明實施例公開的一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理系統(tǒng)結(jié)構(gòu)示意圖。

      具體實施方式

      下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

      本發(fā)明實施例公開了一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理方法,參見圖1所示,該方法包括:

      步驟S11:當多個生產(chǎn)者中的任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則利用std::atomic類型,判斷預(yù)設(shè)隊列當前是否符合入列條件,如果是,則將該新數(shù)據(jù)元素緩存至預(yù)設(shè)隊列,如果否,則禁止將該新數(shù)據(jù)元素緩存至預(yù)設(shè)隊列;

      步驟S12:當多個消費者中的任一消費者需要對預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則利用std::atomic類型,判斷預(yù)設(shè)隊列當前是否符合出列條件,如果是,則從當前預(yù)設(shè)隊列中提取出相應(yīng)的數(shù)據(jù)元素,并發(fā)送至相應(yīng)的消費者,以進行相應(yīng)的數(shù)據(jù)處理。

      可以理解的是,上述步驟S11和步驟S12之間在執(zhí)行順序上并無先后關(guān)系。

      進一步的,本發(fā)明實施例的數(shù)據(jù)管理方法,還可以包括:對預(yù)設(shè)隊列進行實時監(jiān)視,若監(jiān)視到當前預(yù)設(shè)隊列中的剩余緩存空間容量小于預(yù)設(shè)容量閾值,則發(fā)出相應(yīng)的容量預(yù)警信息。

      其中,上述預(yù)設(shè)容量閾值可以由用戶根據(jù)實際經(jīng)驗進行具體設(shè)定,在此不對其進行具體限定。

      由上可見,本發(fā)明實施例在多生產(chǎn)者多消費者模式下,若任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則會利用std::atomic類型來判斷預(yù)設(shè)隊列當前是否符合入列條件,然后根據(jù)該判斷結(jié)果來決定是否允許將上新數(shù)據(jù)元素緩存至上述預(yù)設(shè)隊列,若任一消費者試圖對上述預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則會利用std::atomic類型來判斷上述預(yù)設(shè)隊列當前是否符合出列條件,如果是,則會從上述預(yù)設(shè)隊列中提取出待處理數(shù)據(jù),然后發(fā)送至相應(yīng)的消費者以進行相應(yīng)的數(shù)據(jù)處理。由于std::atomic類型對象能夠在不同的線程訪問中避免數(shù)據(jù)競爭事件的發(fā)生,從而使得上述基于std::atomic類型的數(shù)據(jù)訪問過程能夠穩(wěn)定可靠地進行,并具有較高的執(zhí)行效率。也即,本發(fā)明實施例能夠在實現(xiàn)多生產(chǎn)者多消費者模式的過程中,保證了軟件程序的穩(wěn)定性和執(zhí)行效率。

      參見圖2所示,本發(fā)明實施例公開了一種具體的適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)入列管理方法,包括如下步驟:

      步驟S21:當多個生產(chǎn)者中的任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則利用std::atomic類型,判斷預(yù)設(shè)的環(huán)形緩沖區(qū)當前是否已經(jīng)存滿,如果否,則判定當前環(huán)形緩沖區(qū)符合入列條件,如果是,則判定當前環(huán)形緩沖區(qū)不符合入列條件。

      步驟S22:若判定當前上述環(huán)形緩沖區(qū)符合入列條件,則將上述新數(shù)據(jù)元素緩存至上述環(huán)形緩沖區(qū);

      步驟S23:若判定當前上述環(huán)形緩沖區(qū)不符合入列條件,則禁止將上述新數(shù)據(jù)元素緩存至上述環(huán)形緩沖區(qū)。

      需要說明的是,由于目前技術(shù)和硬件的限制,環(huán)形緩沖區(qū)不能無限的大,這就導(dǎo)致入隊列時,當環(huán)形緩沖區(qū)溢出后,將會出現(xiàn)丟棄數(shù)據(jù)的情況。針對這種情況,在使用本發(fā)明方法時,需要協(xié)商一個合理的環(huán)形緩沖區(qū)長度,保證消費者和生產(chǎn)者之間平衡,數(shù)據(jù)不會丟失,并且合理的使用操作系統(tǒng)的內(nèi)存。

      在上一實施例的基礎(chǔ)上,參見圖3所示,本發(fā)明實施例公開了一種具體的適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)出列管理方法,包括如下步驟:

      步驟S31:當多個消費者中的任一消費者需要對上述環(huán)形緩沖區(qū)中緩存的數(shù)據(jù)元素進行處理,則利用std::atomic類型,判斷當前預(yù)設(shè)隊列中是否存在未處理的數(shù)據(jù)元素,如果是,則判定當前預(yù)設(shè)隊列符合出列條件,如果否,則判定當前預(yù)設(shè)隊列不符合出列條件。

      步驟S32:若判定當前預(yù)設(shè)隊列符合出列條件,則從當前預(yù)設(shè)隊列中提取出相應(yīng)的數(shù)據(jù)元素,并發(fā)送至相應(yīng)的消費者,以進行相應(yīng)的數(shù)據(jù)處理。

      步驟S33:若判定當前預(yù)設(shè)隊列不符合出列條件,則返回出列失敗的提示信息。

      相應(yīng)的,本發(fā)明還公開了一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理系統(tǒng),參見圖4所示,該系統(tǒng)包括:

      入列管理模塊11,用于當多個生產(chǎn)者中的任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則利用std::atomic類型,判斷預(yù)設(shè)隊列當前是否符合入列條件,如果是,則將該新數(shù)據(jù)元素緩存至預(yù)設(shè)隊列,如果否,則禁止將該新數(shù)據(jù)元素緩存至預(yù)設(shè)隊列;

      出列管理模塊12,用于當多個消費者中的任一消費者需要對預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則利用std::atomic類型,判斷預(yù)設(shè)隊列當前是否符合出列條件,如果是,則從當前預(yù)設(shè)隊列中提取出相應(yīng)的數(shù)據(jù)元素,并發(fā)送至相應(yīng)的消費者,以進行相應(yīng)的數(shù)據(jù)處理。

      由上可見,本發(fā)明實施例在多生產(chǎn)者多消費者模式下,若任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則會利用std::atomic類型來判斷預(yù)設(shè)隊列當前是否符合入列條件,然后根據(jù)該判斷結(jié)果來決定是否允許將上新數(shù)據(jù)元素緩存至上述預(yù)設(shè)隊列,若任一消費者試圖對上述預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則會利用std::atomic類型來判斷上述預(yù)設(shè)隊列當前是否符合出列條件,如果是,則會從上述預(yù)設(shè)隊列中提取出待處理數(shù)據(jù),然后發(fā)送至相應(yīng)的消費者以進行相應(yīng)的數(shù)據(jù)處理。由于std::atomic類型對象能夠在不同的線程訪問中避免數(shù)據(jù)競爭事件的發(fā)生,從而使得上述基于std::atomic類型的數(shù)據(jù)訪問過程能夠穩(wěn)定可靠地進行,并具有較高的執(zhí)行效率。也即,本發(fā)明實施例能夠在實現(xiàn)多生產(chǎn)者多消費者模式的過程中,保證了軟件程序的穩(wěn)定性和執(zhí)行效率。

      其中,上述入列管理模塊,包括第一判斷單元和入列控制單元;其中,

      第一判斷單元,用于當多個生產(chǎn)者中的任一生產(chǎn)者產(chǎn)生新數(shù)據(jù)元素,則利用std::atomic類型,判斷預(yù)設(shè)隊列當前是否已經(jīng)存滿,如果否,則判定當前預(yù)設(shè)隊列符合入列條件,如果是,則判定當前預(yù)設(shè)隊列不符合入列條件;

      入列控制單元,用于當?shù)谝慌袛鄦卧卸ó斍邦A(yù)設(shè)隊列符合入列條件,則將該新數(shù)據(jù)元素緩存至預(yù)設(shè)隊列,當?shù)谝慌袛鄦卧卸ó斍邦A(yù)設(shè)隊列不符合入列條件,則禁止將該新數(shù)據(jù)元素緩存至預(yù)設(shè)隊列。

      另外,上述出列管理模塊,包括第二判斷單元和出列管理單元;其中,

      第二判斷單元,用于當多個消費者中的任一消費者需要對預(yù)設(shè)隊列中緩存的數(shù)據(jù)元素進行處理,則利用std::atomic類型,判斷當前預(yù)設(shè)隊列中是否存在未處理的數(shù)據(jù)元素,如果是,則判定當前預(yù)設(shè)隊列符合出列條件,如果否,則判定當前預(yù)設(shè)隊列不符合出列條件;

      出列管理單元,用于當?shù)诙袛鄦卧卸ó斍邦A(yù)設(shè)隊列符合出列條件,則從當前預(yù)設(shè)隊列中提取出相應(yīng)的數(shù)據(jù)元素,并發(fā)送至相應(yīng)的消費者,以進行相應(yīng)的數(shù)據(jù)處理。

      本實施例中,上述數(shù)據(jù)管理系統(tǒng),還可以進一步包括隊列監(jiān)視模塊和容量預(yù)警模塊;其中,

      隊列監(jiān)視模塊,用于對預(yù)設(shè)隊列進行實時監(jiān)視;

      容量預(yù)警模塊,用于當隊列監(jiān)視模塊監(jiān)視到當前預(yù)設(shè)隊列中的剩余緩存空間容量小于預(yù)設(shè)容量閾值,則發(fā)出相應(yīng)的容量預(yù)警信息。

      本實施例中,上述預(yù)設(shè)隊列具體可以為環(huán)形緩沖區(qū)。

      最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。

      以上對本發(fā)明所提供的一種適用于多生產(chǎn)者多消費者模式的數(shù)據(jù)管理方法及系統(tǒng)進行了詳細介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。

      當前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1