您当前的位置: 首页 > 技术文章 > 编程语言

如何实现哈希表的多线程同步读写

作者:licqi 时间:2011-01-20阅读数:人阅读

[c]Object syncObj = new Object();­ Hashtable htObj = new Hashtable;­ Thread thr1st = new Thread(new ThreadStart(func_thr1st));­ Thread thr2nd = new Thread(new ThreadStart(func_thr2nd));­ Thread thr3th = new Thread(new ThreadStart(func_thr3th));­ ­ private void func_thr1st()­ {­ lock(syncObj)­ {­ //do something­ //htObj.Add() or htObj.Remove() or enumerate htObj;­ }­ }­ private void func_thr1st()­ {­ lock(syncObj)­ {­ //do something­ //htObj.Add() or htObj.Remove() or enumerate htObj;­ }­ }­ private void func_thr1st()­ {­ lock(syncObj)­ {­ //do something­ //htObj.Add() or htObj.Remove() or enumerate htObj;­ }­ }­ 上面就是達到Hashtable線程同步的做法,下面是等效的做法:­ Object syncObj = new Object();­ Hashtable htObj = Hashtable.Synchronized(new Hashtable()); ­ Thread thr1st = new Thread(new ThreadStart(func_thr1st));­ Thread thr2nd = new Thread(new ThreadStart(func_thr2nd));­ Thread thr3th = new Thread(new ThreadStart(func_thr3th));­ ­ private void func_thr1st()­ {­ htObj.Add();­ htObj.Remove();­ lock(syncObj)­ {­ //do something­ //enumerate htObj;­ }­ }­ private void func_thr1st()­ {­ htObj.Add();­ htObj.Remove();­ lock(syncObj)­ {­ //do something­ //enumerate htObj;­ }­ }­ private void func_thr1st()­ {­ htObj.Add();­ htObj.Remove();­ lock(syncObj)­ {­ //do something­ //enumerate htObj;­ }­ }­ //Hashtable htObj = Hashtable.Synchronized(new Hashtable()); ­ //這樣獲得了Hashtable的同步對象之后,當Add或者Remove的時候,­ //htObj會自動用lock鎖住自己,所以不需要在外面用lock,­ //但因為枚舉集合類型都不是線程安全的,所以執行枚舉操作的時候仍需在外部用lock[/c]

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:licqi@yunshuaiweb.com

标签: c#
加载中~