gpt4 book ai didi

c# - 多线程访问.net中的集合

转载 作者:行者123 更新时间:2023-12-03 13:21:00 25 4
gpt4 key购买 nike

假设有一个由Hashtable.Synchronized()创建的类似Hashtable的东西,它可以被多个线程访问。键值对是Hashtable中的Guid和Object。
一个线程需要轮询此哈希表,直到另一个线程将特定的Guid key 添加到此列表中为止。

下面是我的代码。

        public Hashtable syncHt = new Hashtable();
public void Init()
{
Hashtable ht = new Hashtable();
syncHt = Hashtable.Synchronized(ht);
}

在应用程序初始化中,我将调用init();。

在线程之一中,我将调用isExist来查找由其他线程添加的特定Guid。
public bool isExist(Guid sId)
{
while (true)
{
if (syncHt.ContainsKey(sId))
{
return true;
}
}

}

我在想这个循环是否可以结束。我如何知道哈希表在轮询期间发生了变化?谢谢

最佳答案

在.NET中,阅读和更重要的是给引用赋值始终是原子的。

要执行原子操作,请使用System.Threading.Interlocked类。参见MSDN

I was wondering whether this loop could be ended.



当另一个(仅允许1个编写器)线程插入所需值(是)时,它将结束。

在MSDN上: Hashtable is thread safe for use by multiple reader threads and a single writing thread.

但是您的解决方案效率很低。繁忙循环可以无偿地消耗大量CPU时间。在旧式收藏中存储(盒装)指南也不是完美的选择。

关于c# - 多线程访问.net中的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com