君子难得半日安

代码改变世界

HashTable与线程安全

2012-12-19 15:06  半日安  阅读(372)  评论(0)    收藏  举报

HashTable与线程安全:

为了保证在多线程的情况下的线程同步访问安全,微软提供了自动线程同步的HashTable:


如果 HashTable要允许并发读但只能一个线程写, 要这么创建 HashTable实例:


    //Thread safe HashTable
    System.Collections.Hashtable htSyn = System.Collections.Hashtable.Synchronized(new System.Collections.Hashtable());
这样, 如果有多个线程并发的企图写HashTable里面的 item, 则同一时刻只能有一个线程写, 其余阻塞; 对读的线程则不受影响。

  

另外一种方法就是使用lock语句,但要lock的不是HashTable,而是其SyncRoot;虽然不推荐这种方法,但效果一样的,因为源代码就是这样实现的:



    //Thread safe
    private static Hashtable htCache = new Hashtable();

    public static void AccessCache()
    {
        lock (htCache.SyncRoot)
        {
            //Do something
        }
    }

君子难得半日安