日期:2014-05-17  浏览次数:20425 次

问一个利用线程实现并发控制的
我有个程序,需要进行并发控制。

要求,1,每次只允许一个用户执行某段程序。(我的程序首先会从数据库查询,然后修改数据库的记录,数据库的操作使用了事务,直到数据库事务完成,才会进行下一个用户的操作)
  2,后面的用户需要等待上一个用户执行完毕,才能执行。

我现在使用数据库事务,对表加锁的方法实现的,但是这样的设计不是很完美。请教各位高手。



------解决方案--------------------
如果是想通过线程来监控的话,下面的写法应该可以满足你的要求:

private BackgroundWorker worker=new BackgroundWorker();//定义后台线程;

在界面构造函数中注册worker的DoWork、RunWorkerCompleted事件
{
worker.DoWork+=new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}

Dowork事件中写相关的业务执行逻辑;
RunWorkerCompleted事件中写完成后的提示信息;

在用户执行的方法里加上对线程状态的监视条件(用于判断线程是否空闲可用)
{
if(worker.IsBusy)
{
MessageBox.Show("存在用户正在处理中,请稍后....");
return;
}
worker.RunWorkerAsync();//执行线程方法
}