【发布时间】:2012-03-13 05:09:24
【问题描述】:
我在用 c# 编写异步多服务器网络应用程序时遇到了问题。我有许多工作由线程池处理,其中包括对网络套接字的写入。这最终允许了多个线程可以同时写入套接字并混淆我的传出消息的情况。我解决这个问题的想法是实现一个队列系统,只要数据被添加到队列中,套接字就会写入它。
我的问题是,我无法完全理解这种性质的架构。我想象有一个队列对象在数据被添加到队列时触发一个事件。然后该事件将写入队列中保存的数据,但这不起作用,因为如果两个线程同时到达并添加到队列中,即使队列被设为线程安全,事件仍然会为两者触发,并且我会遇到同样的问题。因此,如果另一个事件正在进行中,那么可能会以某种方式推迟一个事件,但是一旦第一个事件完成,我该如何继续该事件,而不会简单地阻塞某个互斥锁或其他东西上的线程。如果我不尝试严格遵守“无阻塞”架构,这不会那么难,但是这个特定的应用程序要求我允许线程池线程继续做他们的事情。
有什么想法吗?
【问题讨论】:
标签: c# architecture asynchronous queue asyncsocket