多個線程訪問統一對象的不同方法_C#多線程讀寫同一文件處理

在多線程訪問讀寫同一個文件時,經常遇到異常:“文件正在由另一進程使用,因此該進程無法訪問此文件”。

多線程訪問統一資源的異常,

解決方案1,保證讀寫操作單線程執行,可以使用lock

解決方案2,使用System.Threading.ReaderWriterLockSlim ,對讀寫操作鎖定處理

讀寫鎖是以 ReaderWriterLockSlim 對象作為鎖管理資源的,不同的 ReaderWriterLockSlim 對象中鎖定同一個文件也會被視為不同的鎖進行管理,這種差異可能會再次導致文件的并發寫入問題,所以 ReaderWriterLockSlim 應盡量定義為只讀的靜態對象。

ReaderWriterLockSlim 有幾個關鍵的方法,本文僅討論寫入鎖:

調用 EnterWriteLock 方法 進入寫入狀態,在調用線程進入鎖定狀態之前一直處于阻塞狀態,因此可能永遠都不返回。
調用 TryEnterWriteLock 方法 進入寫入狀態,可指定阻塞的間隔時間,如果調用線程在此間隔期間并未進入寫入模式,將返回false。
調用 ExitWriteLock 方法 退出寫入狀態,應使用 finally 塊執行 ExitWriteLock 方法,從而確保調用方退出寫入模式。

一、不是用鎖處理,多線程訪問文件不定時拋出異常

abce0cd7a542eca43ec7c2d36ec7dc4a.png

4db5e9d1fb162385e63756a003653e56.png

二、使用讀寫鎖 同步寫入文件處理

C#多線程讀寫同一文件處理

三、補充:初始化FileStream時使用包含文件共享屬性(System.IO.FileShare)的構造函數比使用自定義線程鎖更為安全和高效

e5ffada2ca58ffbe26c69dc7c99be36f.png

66dedad9b75e36bb9c8480f8691adb37.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446080.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux加密框架 crypto 通用算法注冊接口__crypto_register_alg注冊流程

函數介紹 __crypto_register_alg函數實現向加密框架注冊算法(包括靜態算法和動態算法)的功能,輸入參數為算法說明alg,注冊成功時返回算法注冊用的算法幼蟲larval,注冊失敗時返回失敗原因。__crypto_register_alg函數執…

spark官方文檔_Spark整合Ray思路漫談

什么是Ray之前花了大概兩到三天把Ray相關的論文,官網文檔看了一遍,同時特意去找了一些中文資料看Ray當前在國內的發展情況(以及目前國內大部分人對Ray的認知程度)。先來簡單介紹下我對Ray的認知。首先基因很重要,所以我們先需要探查下Ray最初…

python用http協議傳數據_python基礎 -- 簡單實現HTTP協議

標簽:一、直接代碼# -*- coding: utf-8 -*-import socket__author__ ‘lpe234‘__date__ ‘2015-03-12‘if __name__ ‘__main__‘:sock socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind((‘127.0.0.1‘, 8001))sock.listen(5)while True:connecti…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg

算法查找接口crypto_find_alg 算法實例tfm是算法的一個可運行的副本,因此在創建算法實例前首先要查找確認算法是否已經注冊有效,此時算法查找由函數crypto_find_alg實現。補充: struct crypto_tfm *tfm; crypto_tfm類型指針tfm可以理解為指代…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup

參考鏈接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的博客-CSDN博客 函數介紹 crypto_alg_mod_lookup函數輸入參數包括待查找的算法名name、算法類型type和算…

qt triggered信號_Qt之網絡編程UDP通信

點擊上方“Qt學視覺”,選擇“星標”公眾號重磅干貨,第一時間送達想要學習的同學們還請認真閱讀每篇文章,相信你一定會有所收獲UDP通信概述UDP(UserDatagramProtocol,用戶數據報協議)是輕量的、不可靠的、面向數據報(datagram)、無…

adguard沒有核心 core no_面試官:線程池如何按照core、max、queue的執行順序去執行?...

前言這是一個真實的面試題。前幾天一個朋友在群里分享了他剛剛面試候選者時問的問題:"線程池如何按照core、max、queue的執行循序去執行?"。我們都知道線程池中代碼執行順序是:corePool->workQueue->maxPool,源碼…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_larval_lookup

參考鏈接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 crypto_larval_lookup函數介紹 crypto_larval_lookup函數的輸入參數包括待查找的算法名name、算法類型type和算法類型屏蔽位mask,查找命中時返回查找到的算法或注冊用算法幼…

python ssh 遠程登錄路由器執行命令_ssh批量登錄并執行命令(python實現)

局域網內有一百多臺電腦,全部都是linux操作系統,所有電腦配置相同,系統完全相同(包括用戶名和密碼),ip地址是自動分配的。現在有個任務是在這些電腦上執行某些命令,者說進行某些操作,比如安裝某些軟件&…

linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函數

參考鏈接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 函數介紹 static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type,u32 mask) {struct crypto_alg *alg;u32 test 0;if (!((type | mask) & CRYPTO_ALG_TESTED))…

linux加密框架 crypto 算法管理 - 動態和靜態算法管理

參考鏈接 Linux加密框架的算法管理(三)_家有一希的博客-CSDN博客 動態和靜態算法管理 靜態算法 加密框架中的算法分為靜態算法和動態算法兩種,其中靜態算法指的是以"算法名.ko"形式存在的靜態編譯的算法模塊,如aes.k…

3分鐘入門python_3分鐘帶你了解世界第一語言Python 入門上手也這么簡單!

一、Python入門1. Python爬蟲入門一之綜述Python爬蟲入門二之爬蟲基礎了解Python爬蟲入門三之Urllib庫的基本使用Python爬蟲入門四之Urllib庫的高級用法Python爬蟲入門五之URLError異常處理Python爬蟲入門六之Cookie的使用Python爬蟲入門七之正則表達式Python爬蟲入門八之Beaut…

linux加密框架 crypto 算法管理 - 算法檢測

參考鏈接 Linux加密框架的算法管理(四)_家有一希的博客-CSDN博客 函數介紹 如前所述,無論是靜態算法還是動態算法,算法注冊的最后一步都是進行算法正確性檢驗,一般流程是先調用__crypto_register_alg函數進行通用的算…

select選中的值_selenium下拉框處理(select)

前言 web自動化中,常見的場景還有一個下拉框的選擇,哪么在selenium中如何做下拉框的操作呢?selectselect在HTML中表示元素名,可創建單選或多選菜單。HTML中select長什么樣子:select在HTML中元素名,下面有選…

linux加密框架 crypto 算法管理 - 創建哈希算法實例

crypto_alloc_ahash函數 加密框架中的哈希算法可以是同步方式實現的也可以是異步方式實現的,但是算法應用不關注哈希算法的實現方式,關注的是哈希算法提供的算法接口。為實現統一管理,加密框架默認哈希算法的實現方式為異步方式,…

發票管理軟件_企業為什么需要ERP企業管理軟件?

對于一個制造企業來說,生產是企業最大的動力,而生產也需要進行優化管理,一個好的生產管理方式會帶給企業巨大的發展空間和利潤價值。對于一個制造企業來說,生產是企業最大的動力,而生產也需要進行優化管理,…

python 畫風場 scipy_Python數據分析及可視化實例之Scipy

強大到沒有朋友的科學計算庫,不知道怎么介紹ta!大牛張若愚出了厚本的《Python 科學計算》第二版里面包羅萬象,就不做搬運工了,盡快開工pandas。來一彈在NLP自然語言處理中用到的稀疏矩陣處理:# coding: utf-8# # 稀疏矩…

linux加密框架 crypto 算法管理 - 應用角度講解加密框架的運行流程

參考鏈接 Linux加密框架的應用示例(一)_家有一希的博客-CSDN博客 本文大綱 本節將從應用角度說明加密框架的運行流程,包括加密框架如何管理算法、如何動態創建算法,應用模塊如何創建算法實例、如何通過算法實例調用算法接口等。…

java 累進計費率計算_設計費400萬,繳納所得稅100萬,如何籌劃

很多公司老板都會把利潤放在第一位,照理說這是沒錯的,公司要盈利才能繼續經營下去。我國有很多針對小微企業的政策,盈利不高的情況下,基本不會去考慮納稅問題,也沒有多少稅收壓力。但是對一些暴利的服務型行業、軟件設…

linux加密框架 crypto 算法管理 - 哈希算法應用實例

參考鏈接 Linux加密框架應用示例(二)_家有一希的博客-CSDN博客linux加密框架 crypto 算法管理 - 應用角度講解加密框架的運行流程_CHYabc123456hh的博客-CSDN博客 在應用模塊中創建并初始化哈希算法實例 假設某個SA配置使用的認證算法為"hmac(md5…