【发布时间】:2013-03-13 21:35:42
【问题描述】:
我用 C# 编写的服务器应用程序每次需要从数据库中插入或删除数据时都会启动一个新线程。问题在于,由于线程的执行是任意的,因此如果这些事件几乎同时发生,则无法确保在插入同一对象后执行删除命令。
例如:服务器收到插入多个对象的命令。插入所有对象大约需要 5 秒钟。执行 1 秒后,服务器收到从数据库中再次删除所有这些对象的命令。由于删除可能在所有对象完全存储之前发生,因此结果未知。
如何管理某个线程的执行顺序?
【问题讨论】:
-
寻找
System.Threading.Mutex或System.Threading.ManualResetEvent -
Threading.Mutex 是在特定调用中序列化线程的好主意。您还可以查看消息队列。
-
我不认为使用互斥锁会起作用,因为可能存在相同数据的插入、删除和另一个插入操作。在第一次插入完成后,互斥锁不会确保在下一次插入之前执行删除命令,还是我错了?消息队列是一种选择,但我希望有更好的解决方案来避免性能下降。
标签: c# sql multithreading parallel-processing