程序结构是这样的 用this作为参数传递给辅助线程 辅助线程中利用此指针调用Dialog的成员函数 这个函数是写数据库用的 主次线程里都用到 所以需要同步
但是同步能不能这么做 就是
void CMainDlg::WriteData(...)
{
cs.Lock();
Open.. Write Close ...
cs.Unlock();
}
这么做就可以了
这么作没问题!
很正确!
最好在你写数据库的时候加上异常处理
void CMainDlg::WriteData(...)
{
cs.Lock();
try{
Open.. Write Close ...
}
catch(CDBExcept* e){
e->Delete();
cs.UnLock();
}
cs.Unlock();
}
这样在异常发生的时候就不会造成死锁的问题了!
你的理解是正确的。。只要访问的是共享资源,记得Lock ,Unlock..
its ok!
提个相关的建议:
临机区、互斥体、信号量等都是好东东,可以用来解决很多问题,但这些东西都比较消耗系统资源而且会使程序逻辑变得更复杂。我个人的经验和习惯是能不使用的时候尽量不要用,你上面的要求我觉得完全用不着用线程同步来解决。问题无非就是如何保证数据写入的安全性,如果能保证只在一个线程中操作就不会有问题,简单的方法可以通过PostMessage利用Windows的消息队列就可以比较简单安全的实现