我有一个C#服务器应用程序,它监听TCP客户端。每个客户端在服务器上创建一个新线程,它将每10ms向服务器传递一个整数值。
现在我需要从所有客户端获取最大的整数并继续广播,所以我认为问题是我如何从不同的线程中获取所有值并将它们进行比较?
答案 0 :(得分:3)
两个不错的选择和一个OK选项:
1)使用每个线程插入值的ConcurrentQueue<int>
,使用单个读取器线程读取值并更新最大值。
2)使用在线程间共享的volatile int,并使用Interlocked.CompareExchange
在重试循环中以原子方式更新它(例如类似于this)。
3)在最大计算周围使用lock
并更新volatile int。
答案 1 :(得分:0)
我提出了一个简单的解决方案
//首先定义一个静态类......
public static class IntHolder
{
public static int Value;
}
在线程更新静态类的值,其他线程比较它,只有当值更大然后更新它。这样,所有线程都可以访问相同的内存地址
if (IntHolder.Value < Int32.Parse(dataFromClient))
{
IntHolder.Value = Int32.Parse(dataFromClient);
}
如果我错了,请纠正我......或者任何更好的解决方案,我知道它会有竞争条件,但我不确定如何使用锁...
谢谢!