c++隊(duì)列多線程寫日志怎么保證時(shí)序性?-創(chuàng)新互聯(lián)

多線程寫日志怎么保證時(shí)序性?鎖定寫入文件,或?qū)⒚總€(gè)文件的日志放入不同的隊(duì)列。每次處理隊(duì)列消息時(shí),其他線程都不能操作隊(duì)列c++隊(duì)列 多線程寫日志怎么保證
時(shí)序性?

首先,設(shè)計(jì)一個(gè)一個(gè)線程寫一個(gè)線程讀的隊(duì)列,該隊(duì)列有兩個(gè)指針讀寫。閱讀線程:1。首先判斷讀寫指針。如果讀取指針==寫入指針,則不返回?cái)?shù)據(jù),否則讀取數(shù)據(jù),然后讀取指針1。寫入線程:1。(如果使用循環(huán)隊(duì)列)在寫入線程進(jìn)入后檢查讀寫指針。如果讀指針=寫指針1,那么寫線程進(jìn)入線程開關(guān)并繼續(xù)寫,直到讀指針移動(dòng)。(如果數(shù)據(jù)是可以丟棄的實(shí)時(shí)數(shù)據(jù),則不能進(jìn)行判斷)//為了對(duì)數(shù)據(jù)進(jìn)行原子化操作,最好將指針保存在循環(huán)隊(duì)列中。2寫指針來(lái)寫數(shù)據(jù),1。接下來(lái),考慮當(dāng)多個(gè)線程同時(shí)寫入時(shí)如何實(shí)現(xiàn)。首先,申請(qǐng)TLS值(建議使用運(yùn)行時(shí),而不是API,因?yàn)锳PI進(jìn)程最多只能申請(qǐng)255,這樣很容易用完)。然后,每個(gè)線程保存上面實(shí)現(xiàn)的讀寫隊(duì)列,并將隊(duì)列地址放入一個(gè)結(jié)構(gòu)中。每個(gè)寫線程將數(shù)據(jù)寫入自己線程所擁有的隊(duì)列,每個(gè)寫線程將數(shù)據(jù)寫入需要保存的時(shí)間計(jì)數(shù)(getsystemtimeasfiletime)以判斷每個(gè)隊(duì)列中節(jié)點(diǎn)的順序。讀取線程依次遍歷所有隊(duì)列,取出隊(duì)列中的值,并按時(shí)間計(jì)數(shù)的順序進(jìn)行處理。

成都創(chuàng)新互聯(lián)專注于綏棱企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站制作。綏棱網(wǎng)站建設(shè)公司,為綏棱等地區(qū)提供建站服務(wù)。全流程按需搭建網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)如何實(shí)現(xiàn)多個(gè)線程寫,一個(gè)線程讀的隊(duì)列,并且所有線程?

有很多方法可以使用它。

如果通話頻率不高,我會(huì)做定量分析程序。通常,我使用C來(lái)啟用python進(jìn)程。pypy的速度更快。Pypy將結(jié)果生成到redis或mysql的內(nèi)存表中。調(diào)用后,C轉(zhuǎn)到redis或mysql的內(nèi)存表,也可以用文件寫入來(lái)完成,但文件寫入很容易出現(xiàn)不同步,不想用網(wǎng)絡(luò)版,可以用SQLite來(lái)寫結(jié)果,然后用SQLite在另一個(gè)程序中讀取。如果它類似于Internet服務(wù),則可以使用消息隊(duì)列和消息服務(wù)器進(jìn)行通信。如果您的程序需要線程安全和關(guān)鍵區(qū)域保護(hù),最好使用消息隊(duì)列來(lái)支持多線程和多進(jìn)程同時(shí)訪問(wèn)。消息隊(duì)列比數(shù)據(jù)庫(kù)存儲(chǔ)速度快,但不便于數(shù)據(jù)庫(kù)存儲(chǔ)。

vedis的原生版本有C版本,高仿redis的嵌入式版本。您可以使用這個(gè)初始開發(fā)。如果您需要切換到redis,您可以輕松地將vedis修改為redis。SSDB可以在地面存儲(chǔ)redis。SSDB是高仿redis的存儲(chǔ)版本。

如果沒有數(shù)據(jù)存儲(chǔ),可以使用套接字通信或多進(jìn)程通信。例如,chrome是多進(jìn)程的,命名管道用于通信。理論上,這可以用于多語(yǔ)言之間的調(diào)用。命名管道比消息隊(duì)列快,但需要自定義。調(diào)用方法的協(xié)議可以用JSON來(lái)完成,因此一般可以使用n種多語(yǔ)言。如果我們追求性能,我們可以使用二進(jìn)制通信協(xié)議。

Python調(diào)用C語(yǔ)言的方法也很成熟,但需要編寫一些代碼打包,需要防止內(nèi)存泄漏、多線程同步、阻塞、異常等問(wèn)題。

網(wǎng)站欄目:c++隊(duì)列多線程寫日志怎么保證時(shí)序性?-創(chuàng)新互聯(lián)
本文路徑:http://muchs.cn/article28/dhepjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、移動(dòng)網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)、軟件開發(fā)動(dòng)態(tài)網(wǎng)站、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)