线程安全的集合
表示对象的线程安全的无序集合。
2.ConcurrentDictionary
表示可由多个线程同时访问的键/值对的线程安全集合。
表示线程安全的先进先出 (FIFO) 集合
表示线程安全的后进先出 (LIFO) 集合。
5.利用HashTanle实现线程安全
如果想锁整个 hashtable, 包括读和写, 即不允许并发的读和写, 那应该锁 hashtable 实例。
如果想允许并发的读, 不允许并发的写, 那应该创建 Synchronized 的 hashtable, 并对要加锁的一块代码用 SyncRoot 锁住(测试代码如下)。如果不需要对一块代码加锁, 则 hashtable 会自动对单个写的操作加锁。
class Program { static void Main(string[] args) { TestLock(); Console.ReadLine(); } static Hashtable hashtable = Hashtable.Synchronized(new Hashtable()); static string keya = "a"; public static void TestLock() { Thread t1 = new Thread(new ThreadStart(SyncFunctionA)); Thread t2 = new Thread(new ThreadStart(SyncFunctionB)); t1.Start(); t2.Start(); Thread.Sleep(3000); Console.WriteLine("hashtable[" + keya + "] = " + hashtable[keya]); } private static void SyncFunctionA() { lock (hashtable.SyncRoot) { Thread.Sleep(1000); hashtable[keya] = "Value set by SyncFunctionA"; } } private static void SyncFunctionB()//这里写了之后,SyncFunctionA()里就不能再写 { Console.WriteLine("hashtable[" + keya + "] = " + hashtable[keya]); hashtable[keya] = "Value set by SyncFunctionB"; } }