日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

C#中Dictionary與ConcurrentDictionary解鎖多線程操作安全之道

來源: 責編: 時間:2024-04-03 09:10:20 192觀看
導讀使用C#中的Dictionary與ConcurrentDictionary進行多線程操作在C#中,Dictionary是一個常見的字典類型,但它不是線程安全的。為了在多線程環境中確保安全的操作,我們可以使用ConcurrentDictionary,這是一個專門設計用于多線

uq228資訊網——每日最新資訊28at.com

使用C#中的Dictionary與ConcurrentDictionary進行多線程操作

在C#中,Dictionary是一個常見的字典類型,但它不是線程安全的。為了在多線程環境中確保安全的操作,我們可以使用ConcurrentDictionary,這是一個專門設計用于多線程場景的線程安全字典。uq228資訊網——每日最新資訊28at.com

1. 使用Dictionary進行非線程安全操作

首先,我們來看一個使用普通的Dictionary的例子。在這個例子中,我們創建一個Dictionary對象,然后通過多個線程同時進行讀取和寫入操作,以演示潛在的線程安全問題。uq228資訊網——每日最新資訊28at.com

using System;using System.Collections.Generic;using System.Threading;using System.Threading.Tasks;class Program{    static void Main()    {        // 創建一個非線程安全的 Dictionary        Dictionary<int, string> regularDictionary = new Dictionary<int, string>();        // 啟動多個線程對字典進行讀取和寫入操作        List<Task> tasks = new List<Task>();        for (int i = 0; i < 10; i++)        {            int key = i;            tasks.Add(Task.Run(() =>            {                // 讀取和寫入操作                RegularDictionaryExample(regularDictionary, key);            }));        }        // 等待所有任務完成        Task.WaitAll(tasks.ToArray());        Console.WriteLine("Regular Dictionary:");        PrintDictionary(regularDictionary);        Console.ReadLine();    }    // 非線程安全的字典操作示例    static void RegularDictionaryExample(Dictionary<int, string> dictionary, int key)    {        if (dictionary.ContainsKey(key))        {            Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId}: Key {key} already exists. Value: {dictionary[key]}");        }        else        {            dictionary[key] = $"Value from Thread {Thread.CurrentThread.ManagedThreadId}";            Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId}: Key {key} added.");        }    }    // 打印字典內容    static void PrintDictionary<T, U>(Dictionary<T, U> dictionary)    {        foreach (var kvp in dictionary)        {            Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");        }    }}

2. 使用ConcurrentDictionary進行線程安全操作

接下來,我們使用ConcurrentDictionary來解決線程安全問題。ConcurrentDictionary提供了內置的線程安全機制,避免了多線程同時訪問時的問題。uq228資訊網——每日最新資訊28at.com

using System;using System.Collections.Concurrent;using System.Threading;using System.Threading.Tasks;class Program{    static void Main()    {        // 創建一個線程安全的 ConcurrentDictionary        ConcurrentDictionary<int, string> concurrentDictionary = new ConcurrentDictionary<int, string>();        // 啟動多個線程對字典進行讀取和寫入操作        List<Task> tasks = new List<Task>();        for (int i = 0; i < 10; i++)        {            int key = i;            tasks.Add(Task.Run(() =>            {                // 讀取和寫入操作                ConcurrentDictionaryExample(concurrentDictionary, key);            }));        }        // 等待所有任務完成        Task.WaitAll(tasks.ToArray());        Console.WriteLine("/nConcurrent Dictionary:");        PrintDictionary(concurrentDictionary);        Console.ReadLine();    }    // 線程安全的字典操作示例    static void ConcurrentDictionaryExample(ConcurrentDictionary<int, string> dictionary, int key)    {        string value = dictionary.GetOrAdd(key, k => $"Value from Thread {Thread.CurrentThread.ManagedThreadId}");        Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId}: Key {key} {((value == null) ? "added" : "already exists")}. Value: {value}");    }    // 打印字典內容    static void PrintDictionary<T, U>(ConcurrentDictionary<T, U> dictionary)    {        foreach (var kvp in dictionary)        {            Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");        }    }}
  • Dictionary問題: 普通的Dictionary在多線程環境中可能導致數據不一致或異常,因為它不提供線程安全性。
  • ConcurrentDictionary解決方案: ConcurrentDictionary是專為多線程設計的,通過提供內置的線程安全機制,確保在多線程環境中對字典進行安全的讀取和寫入操作。
  • GetOrAdd方法: ConcurrentDictionaryGetOrAdd方法是線程安全的讀取和寫入的原子操作,可以安全地在多線程環境中使用。

通過選擇適當的字典類型,可以確保在多線程應用程序中有效地管理數據,避免潛在的線程安全問題。uq228資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-81061-0.htmlC#中Dictionary與ConcurrentDictionary解鎖多線程操作安全之道

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Golang VS PHP哪個更適合你?

下一篇: 強大的代碼編輯器組件,你知道幾個?

標簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 小米平板5 Pro 12.4簡評:多專多能 兼顧影音娛樂的大屏利器

    疫情帶來了網課,網課盤活了安卓平板,安卓平板市場雖然中途停滯了幾年,但好的一點就是停滯的這幾年行業又有了新的發展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • 攜眾多高端產品亮相ChinaJoy,小米帶來一場科技與人文的視聽盛宴

    7月28日,全球數字娛樂領域最具知名度與影響力的年度盛會中國國際數碼互動娛樂展覽會(簡稱ChinaJoy)在上海新國際博覽中心盛大開幕。作為全球領先的科
  • OPPO Reno10 Pro英雄聯盟定制禮盒公布:薩勒芬妮同款配色夢幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新機,全系標配了超光影長焦鏡頭,是迄今為止拍照
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風扇版本

    據10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風扇版本。另外,這款顯卡 PCB
Top 主站蜘蛛池模板: 兴安盟| 汉沽区| 偃师市| 满洲里市| 琼结县| 林周县| 视频| 东乌珠穆沁旗| 泌阳县| 安塞县| 郯城县| 遂宁市| 曲阳县| 奉贤区| 黄梅县| 城口县| 麻阳| 桦甸市| 福安市| 灵台县| 泌阳县| 万年县| 光山县| 三门峡市| 汨罗市| 淄博市| 德阳市| 余姚市| 巴里| 稻城县| 罗源县| 益阳市| 乌兰县| 嘉兴市| 惠东县| 竹溪县| 阿拉善右旗| 出国| 达拉特旗| 古丈县| 福建省|