在Windows下实现多线程,若在子线程和主线程中都要操作同一个数据库,需要添加锁。
实现锁的方式主要有以下四种:临界区、互斥量、信号量和事件。它们之间的区别和联系详情可参考
《秒杀多线程系列》http://blog.csdn.net/morewindows/article/details/7445233
本项目中有一个连接数据库的类:TOracle,在里面声明了一个静态私有成员
static HANDLE g_hThreadParameter; //创建互斥量
并在其cpp文件中给出定义,并初始化;
HANDLE TOracle::g_hThreadParameter = CreateMutex(NULL, FALSE, NULL);
此外,类中还有一个连接数据库成员函数:Start()和断开数据库成员函数:Stop()
void TOracle::Start()
{
WaitForSingleObject(g_hThreadParameter, INFINITE); //等待互斥量被触发
env=nullptr;
con=nullptr;
stmt=nullptr;
rs=nullptr;
env = Environment::createEnvironment(Environment::DEFAULT);//创建OCCI上下文环境
con = env->createConnection(userNameInit, passwordInit, connStringInit);//创建数据库连接
stmt &#