none
請教一下單一執行緒該用什麼方法鎖定資料?? (mutex? monitor? lock?) RRS feed

  • 問題

  • 嗨~ 我想請教一下
    單一執行緒該用什麼方法鎖定資料??

    以下是我的問題 :
    (1)程式段裡有個 "字典" ,會依據所給的 "路徑" 將資料讀入並填入字典。 (該路徑指向一個 txt 檔,也就是說將 txt 檔裡的內容填入字典)

    (2)程式段裡有個 "Timer" ,會在觸發時間到時,從 "字典"  裡取出資料,並秀在螢幕上。

    (3)當給定的 "路徑" 改變時, "字典" 會刷新,重讀進新的資料。

    問題是 :  當給定一個  "錯誤的、不存在的 路徑"  時, 字典裡的內容將會是空的(讀檔時有做例外處理)。 因此當 Timer  繼續從字典裡讀資料時,會出現 "KeyNotFound" 的例外。

    所以,我想做的是  該怎麼樣去 鎖定 "字典" ,當 在做讀檔時 ?  讓 Timer 不去讀取。

    謝謝~~
    2008年3月30日 下午 12:53

所有回覆

  • HI,

     

    用lock敘述應該就可以了:

     

    http://msdn2.microsoft.com/en-us/library/c5kehkcz.aspx

     

    tihs

    2008年3月30日 下午 01:22
  • 嗨~ 謝謝!!
    請教一下,像我要鎖住 字典 的話, 是這樣寫嗎??

    lock(dic)
    {
    //讀檔副程式
    readfile();
    }

    還有就是看到說明說 只能鎖住 "參考型別" ,不能鎖住 "實值型別"
    那我可以鎖住一個字串嗎?
    如:

    string test;
    lock(test)
    {
    }


    還有就是msdn上寫的,三種建構方式,可不可以舉例說明一下,謝謝!!
    引用自 msdn :

    一般而言,請避免鎖定 public 型別或程式碼無法控制的執行個體。有三種常見的建構,分別為 lock (this)lock (typeof (MyType))lock ("myLock"),違反這項方針:

    • lock (this) 在可公開存取執行個體的情況下,會是問題所在。

    • lock (typeof (MyType)) 在可公開存取 MyType 的情況下,會是問題所在。

    • lock(“myLock”) 會是問題所在,因為使用相同字串的處理序中若有任何其他程式碼,將會共用相同的鎖定。

    最佳作法是定義要鎖定的 private 物件,或者定義 private static 物件變數保護所有執行個體通用的資料。



    謝謝您耐心的回覆~~



    2008年3月30日 下午 04:30