在開發(fā)程序的過程中,難免少不了寫入錯誤日志這個(gè)關(guān)鍵功能。實(shí)現(xiàn)這個(gè)功能,可以選擇使用第三方日志插件,也可以選擇使用數(shù)據(jù)庫,還可以自己寫個(gè)簡單的方法把錯誤信息記錄到日志文件。
選擇最后一種方法實(shí)現(xiàn)的時(shí)候,若對文件操作與線程同步不熟悉,問題就有可能出現(xiàn)了,因?yàn)橥粋€(gè)文件并不允許多個(gè)線程同時(shí)寫入,否則會提示“文件正在由另一進(jìn)程使用,因此該進(jìn)程無法訪問此文件”。
這是文件的并發(fā)寫入問題,就需要用到線程同步。而微軟也給線程同步提供了一些相關(guān)的類可以達(dá)到這樣的目的,本文使用到的System.Threading.ReaderWriterLockSlim 便是其中之一。
該類用于管理資源訪問的鎖定狀態(tài),可實(shí)現(xiàn)多線程讀取或進(jìn)行獨(dú)占式寫入訪問。利用這個(gè)類,我們就可以避免在同一時(shí)間段內(nèi)多線程同時(shí)寫入一個(gè)文件而導(dǎo)致的并發(fā)寫入問題。
讀寫鎖是以 ReaderWriterLockSlim 對象作為鎖管理資源的,不同的 ReaderWriterLockSlim 對象中鎖定