我的程序起了几个数据库连接,并且开了几个线程抢数据库连接来调用存储过程,存储过程的功能是返回一批记录,并把这批记录打上标记,就不会被取出了。现在的现象是
线程1调用了存储过程后取会5条记录如 101,102,103,104,105
但线程2会返回102,103,105,106,107出现不该出现的重复现象
请问这是为什么,该怎么解决?
请教,谢谢!
线程1调用了存储过程后取会5条记录如 101,102,103,104,105
但线程2会返回102,103,105,106,107出现不该出现的重复现象
请问这是为什么,该怎么解决?
请教,谢谢!
解决方案 »
- 散分啊散分啊
- 不想用ADODataCtrol与DataGrid绑定使用,但不知道我定义的DataGrid地对象m_datagrid中用那个函数来设置数据源?
- 关于InitApplication
- 谁帮兄弟我一把??关于listctrl 加图标的问题,我百分奉送,顶者有分
- 如何利用EnumWindow获取所有的窗口句柄?
- MFC ClassWizard中Radio控件是否不能添加成员变量
- 请炮炮(CFSO813)进来领分,谢谢你的帮助:)
- 很简单的问题,关于对话框的工具条的一些操作。实在太简单了,但是我不知道。
- MFC socket与windows socket?
- 请问我怎样实现动画?
- 如何屏蔽CWinApp的main函数,而改用我自己的main函数
- CreateProcess的问题,希望有人可以解答
谢谢!
CRITICAL_SECTION g_csB;void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2); InitializeCriticalSection(&g_csA);
InitializeCriticalSection(&g_csB);
Sleep(4000); DeleteCriticalSection(&g_csA);
DeleteCriticalSection(&g_csB);
}DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
EnterCriticalSection(&g_csA);
Sleep(1);
EnterCriticalSection(&g_csB);
if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_csB);
LeaveCriticalSection(&g_csA);
}
return 0;
}DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
EnterCriticalSection(&g_csB);
Sleep(1);
EnterCriticalSection(&g_csA);
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_csA);
LeaveCriticalSection(&g_csB);
}
cout<<"thread2 is running!"<<endl;
return 0;
}