none
資料庫執行緒 及 lock RRS feed

  • 問題

  • 我有兩個執行緒 
    一個負責 新增手機端資料庫,一個負責選出資料庫裡的資料

    但有時候資料似乎沒有選出完全
    我猜測應該是還沒輸入就選出來了

    是否,我可以使用lock對於操作資料庫的函式(如新增資料至手機端的函式)做鎖定呢?

    不知道有沒有人對此有相關的經驗呢?

    麻煩大家了!

    2009年12月11日 上午 01:08

解答

所有回覆

  • 可以描述的清楚並且具體一些嗎 ? 這樣可以減少大家猜謎的時間, 並且你也可以更快獲得解答
    發問的技巧可以參考這一篇:

    張貼文章應注意事項及應提供資訊


    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年12月11日 上午 02:46
  • HI,

    您可以考慮使用ReaderWriterLock類別(http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx)來控制.
    2009年12月11日 上午 11:25
  • 對不起!!

    我在Mobile 6的平台上,使用.Net Compact Framework v3.5開發,

    我使用本機端資料庫時(.sdf),紀錄使用者的一些操作行為,

    然後,並且利用一個執行緒來抓出所有的操作行為資料,一個執行緒來寫入操作行為資料

    但是,有時候,資料明明有寫入,但是抓取出來時卻不完整,因此,我猜測是,資料還沒有寫入完成,然後,另一個執行緒已經開始抓資料了,

    所以,我想問,在這樣的情況下,是否可以使用lock語法,在資料寫入時,鎖定此執行範圍,不給其他執行緒操作呢?

    因為,我看了MSDN上的lock解說,不是完全的理解,是否會抵觸到以下的規則

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

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

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

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

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

     

    謝謝大家



    2009年12月11日 下午 12:43
  • Windows Mobile環境沒有ReaderWriterLock類別使用, 也可以用Monitor類別來模擬, 請參考:
    • 已提議為解答 bauannModerator 2009年12月18日 上午 01:42
    • 已標示為解答 Lolota Lee 2009年12月21日 上午 08:54
    2009年12月12日 下午 01:59