社区
C#
帖子详情
线程同步Hashtable问题
hainang1234
2006-01-11 12:33:39
看了MSDN[中文]好几篇,没太懂,存在一些问题,请教一下:
1.Hashtable.Synchronized(new Hashtable)创建的Hashtable可以保证Add,Update,Remove方法正确同步吗?
2.锁定Hashtable本身和锁定Hashtable.SyncRoot有什么区别?
3.安全的遍历Hashtable需要锁定Hashtable.SyncRoot?
...全文
404
6
打赏
收藏
线程同步Hashtable问题
看了MSDN[中文]好几篇,没太懂,存在一些问题,请教一下: 1.Hashtable.Synchronized(new Hashtable)创建的Hashtable可以保证Add,Update,Remove方法正确同步吗? 2.锁定Hashtable本身和锁定Hashtable.SyncRoot有什么区别? 3.安全的遍历Hashtable需要锁定Hashtable.SyncRoot?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
linfengcyl
2006-01-12
打赏
举报
回复
按MSDN的意思应该如此,有待试验。MSDN也会出错:)
如果是多线程访问,任一线程中任一方法没有使用lock(hashtable.SyncRoot),都有可能会出错。(验证过)
看MSDN的意思用Hashtable.Synchronized应该是最安全的,不过代价应该也最大。(未验证)
lostowner
2006-01-12
打赏
举报
回复
学习
lidong6
2006-01-12
打赏
举报
回复
那就是说如果不派生类的话应该就一样了.
hainang1234
2006-01-11
打赏
举报
回复
自己又看了一些,自己做出了一些理想:
1.Hashtable.Synchronized(new Hashtable)创建的Hashtable在进行Add,Update,Remove操作时会锁住Hashtable.SyncRoot。
2.锁Hashtable本身和锁定Hashtable.SyncRoot本身是一样的。只不过Hashtable本身在Add,Update,Remove时会锁Hashtable.SyncRoot(Synchronized后的),所以锁Hashtable.SyncRoot可以减少自己手动的一些控制。
3.要想安全的话就需要锁定。
linfengcyl
2006-01-11
打赏
举报
回复
lock( myCollection.SyncRoot )和lock(myCollection)的区别MSDN上说了,是前者可以用于派生类的同步访问,而后者不可以。而Hashtable.Synchronized()是线程安全的同步。
lidong6
2006-01-11
打赏
举报
回复
我认为lock( myCollection.SyncRoot ) 和lock(myCollection)是一样的,不明白为什么要多此一举,看到MSDN上有这么一句:
同步代码必须在 Hashtable 的 SyncRoot 上执行操作,而不是直接在 Hashtable 上执行. 看样子微软建议使用lock( myCollection.SyncRoot ).
深入解析
Hashtable
的
线程同步
问题
在我们最熟悉的概念里,我们都知道相对于Hashmap而言,
Hashtable
的处理效率更慢,因为
Hashtable
引入了多线程安全机制,所以在处理键值对的时候,效率很慢。 但事实上
Hashtable
本身是没有实现serializable接口,也就是说它本身在多线程的机制中并不是线程安全的。 然而,在真正的应用开发上,当我们需要用到多线程的
Hashtable
时,我们都会在创建的时候引入同步概念,
Hashtable
如何保证线程安全
Hashtable
如何保证线程安全前言
Hashtable
中的常用变量
Hashtable
中的常用方法构造方法contains()rehash()addEntry()put()其他方法
Hashtable
与HashMap的区别 前言 HashMap是非同步的,没有对读写等操作进行锁保护,是线程不安全的。
Hashtable
是同步的,所有的读写操作都进行了锁保护,是线程安全的。
Hashtable
的底层是数组+链表实现的
Hashtable
中的常用变量 private transient Entry<?,?&
深入解析线程安全的
Hashtable
实现
线程安全的
Hashtable
在多线程编程中扮演着重要的角色,通过锁机制、分段锁、CAS等方式来保障数据的一致性。通过深入理解
Hashtable
的线程安全性实现原理和各种优化手段,可以更好地应对复杂的多线程环境,确保数据结构的稳定性和高性能。除了传统的锁机制外,一些现代的
Hashtable
实现还使用了无锁的并发控制,例如CAS(Compare-And-Swap)操作。有些
Hashtable
实现采用惰性加载策略,只在必要时才进行锁的获取和释放,以减小锁的争用,提高并发性能。
Hashtable
的基本操作,如。
Hashtable
是线程安全的,多个线程可以同时访问一个
Hashtable
对象而无需额外的同步
在Java中哈希表是通过数组实现的,它使用哈希函数将键映射到存储桶(bucket)中,每个存储桶可以存储一个或多个键值对。哈希表是一种基于哈希函数进行查找的数据结构,根据关键码值(Key-Value)进行访问的数据结构,通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。为了解决HashMap线程不安全的
问题
,Java提供了ConcurrentHashMap类,该类是线程安全的,多个线程可以共享一个ConcurrentHashMap对象而无需额外的同步,比
HashTable
的扩展性更好。
C#中
Hashtable
用法详解(包括
线程同步
)
本博客参考了:https://www.cnblogs.com/xpvincent/archive/2013/01/15/2860841.html 使用
HashTable
的情况:1.数据量很大 2.高频查询 3.数据类型不唯一 基本操作: //添加一个keyvalue键值对:
Hashtable
Object.Add(key,value); //移除某个keyvalue键值对:
Hashtable
Object.Remove(key); //移除所有元素:
Hashtable
Obje
C#
111,096
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章