日期:2014-05-18  浏览次数:20866 次

菜鸟 问个对大家来说比较弱智的问题,什么是[线程安全的]啊.

RT

经常听人说,什么什么是线程安全的,比如说HashTable,就是线程安全的,

意思是不是,当多个线程读写HashTable的数据时,不需要对此加锁啊???

问题可能有点弱智,见笑见笑。

------解决方案--------------------
HashTable不用加lock关键字,Dictionary需要显式使用lock关键字
------解决方案--------------------
就是说对 HashTable 的多线程访问,不会造成冲突,你自己要做到线程安全,就要涉及到互斥,加锁,同步等概念
------解决方案--------------------
目前我了解的就是,线程安全 就是多个线程之间访问,防止冲突, 比如一个线程要改变lable的值,另外一个也要改变他大的值,如果同时改变,就冲突了。
另外一个加锁也是为了防止这种现象,比如同时操作一个变量
问这个问题不算是菜鸟哦,楼主谦虚啦
------解决方案--------------------
你可以查MSDN


线程安全
--------------------------------------------

Hashtable 是线程安全的,可由多个读取器线程和一个写入线程使用。 多线程使用时,如果只有一个线程执行写入(更新)操作,则它是线程安全的,从而允许进行无锁定的读取(若编写器序列化为 Hashtable)。 若要支持多个编写器,如果没有任何线程在读取 Hashtable 对象,则对 Hashtable 的所有操作都必须通过 Synchronized 方法返回的包装完成。 

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。 即使一个集合已进行同步,其他线程仍可以修改该集合,这将导致枚举数引发异常。 若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常。