第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

試圖為 C# 并發(fā)隊(duì)列找到無鎖解決方案

試圖為 C# 并發(fā)隊(duì)列找到無鎖解決方案

C#
白衣非少年 2023-05-13 16:04:46
我在 C# 中有以下代碼:(_StoreQueue 是一個(gè) ConcurrentQueue)        var S = _StoreQueue.FirstOrDefault(_ => _.TimeStamp == T);        if (S == null)        {            lock (_QueueLock)            {                // try again                S = _StoreQueue.FirstOrDefault(_ => _.TimeStamp == T);                if (S == null)                {                    S = new Store(T);                    _StoreQueue.Enqueue(S);                }            }        }該系統(tǒng)實(shí)時(shí)收集數(shù)據(jù)(相當(dāng)高的頻率,大約每秒 300-400 次調(diào)用)并將其放入代表 5 秒間隔的容器(存儲(chǔ)對(duì)象)中。這些 bin 在寫入時(shí)處于隊(duì)列中,并且在處理和寫入數(shù)據(jù)時(shí)隊(duì)列被清空。因此,當(dāng)數(shù)據(jù)到達(dá)時(shí),會(huì)檢查是否有該時(shí)間戳的 bin(四舍五入 5 秒),如果沒有,則創(chuàng)建一個(gè)。由于這是非常多線程的,系統(tǒng)遵循以下邏輯:如果有bin,就是用來放數(shù)據(jù)的。如果沒有 bin,將啟動(dòng)一個(gè)鎖,并在該鎖內(nèi)再次進(jìn)行檢查以確保它不是由另一個(gè)線程同時(shí)創(chuàng)建的。如果仍然沒有 bin,則會(huì)創(chuàng)建一個(gè)。使用此系統(tǒng),大約每 2k 次調(diào)用使用一次鎖我想看看是否有辦法移除鎖,但這主要是因?yàn)槲艺J(rèn)為必須有一個(gè)更好的解決方案來雙重檢查。我一直在考慮的另一種方法是提前創(chuàng)建空箱子,這將完全消除對(duì)任何鎖的需求,但搜索正確的箱子會(huì)變得更慢,因?yàn)樗仨殥呙桀A(yù)建箱子列表才能找到正確的那個(gè)。
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

使用ConcurrentDictionarycan 解決您遇到的問題。在這里,我假設(shè)您的屬性是雙精度類型TimeStamp,但它可以是任何類型,只要您使ConcurrentDictionary鍵與類型匹配即可。


class Program

{

    ConcurrentDictionary<double, Store> _StoreQueue = new ConcurrentDictionary<double, Store>();


    static void Main(string[] args)

    {

        var T = 17d;


        // try to add if not exit the store with 17

        _StoreQueue.GetOrAdd(T, new Store(T));

    }

    public class Store

    {

        public double TimeStamp { get; set; }

        public Store(double timeStamp)

        {

            TimeStamp = timeStamp;

        }

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-05-13
  • 1 回答
  • 0 關(guān)注
  • 308 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)