我有一个应用程序有两个线程。优雅地关闭多线程应用程序?
,使用插座和更新数据表
第二插件的数据表到数据库中捕获的数据的第一个(主线程)。
该应用程序工作正常,但当它关闭时,主线程完成读取数据并在第二个线程中调用Abort方法,该方法可能会插入到数据库中,并导致数据不一致。
目前我使用下面的解决方案来克服
EDIT“插入过程中中止”: 强大的答案后,我改变了代码
void MainThread()
{
while(Read())
{
//Read Data through socket
try
{
//Wait on Mutex1
//Update Tables
}
finally
{
//Release Mutex1
}
}
_isrunning = false;
_secondThread.Join();
}
void SecondThread()
{
while(_isrunning)
{
try
{
//Wait on Mutex1
//Insert Tables into Database using transactions
}
finally
{
//Release Mutex1
}
}
}
所以..不要叫“中止”!这不是一个好主意。永远。 – 2009-06-28 09:51:00
重新评论“我不想使用事务(为了性能),所以不使用互斥和线程。放弃应用程序会导致不一致的记录“ - 我不得不第二个Sam;这太疯狂了,大多数数据库都针对交易进行了全面优化(事实上,通常只有回滚会带来额外的成本)。可以运行,如果它损坏的状态。让它稳健地工作,然后(如果它太慢)分析它,并找到实际的性能瓶颈,并修复它们。不要破坏数据库... – 2009-06-28 11:45:14
特别是,你的互斥量*当你的EXE由于外部因素(“杀死进程”,蓝屏死机,或者更可能的电源故障)而死亡时,没有任何东西可以帮助你。只有一个交易是为了让你的插入安全而设计的,为什么你不喜欢它们? – 2009-06-28 11:55:10