线程同步

hongkun18 2011-08-29 04:08:06
dll中有函数A;
写个dll的客户测试程序,程序中开了2个线程 T1,T2,2个线程都调用了A;
A中控制同步:

*** A()
{
WaitForSingleObject(g_mutex,INFINITE);
...1;
...2;
//ReleaseMutex(g_mutex); //注意屏蔽了该句
}
怎么2个线程都能执行1,2两行代码阿,不是已经锁住了吗.
...全文
90 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
百事烟 2011-08-29
  • 打赏
  • 举报
回复
线程同步在实际中并不要求死循环,

但在学习的时候最好用while(1),容易看出效果

你得出的结果是正确的,1个线程结束了,另一个线程会进来的
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
while (1)
{
WaitForSingleObject(g_hMutex, INFINITE);
// 1..
// 2..
ReleaseMutex(g_hMutex);
}
return 0;
}

hongkun18 2011-08-29
  • 打赏
  • 举报
回复
g_mutex = CreateMutex(0, FALSE, 0);

或者 InitializeCriticalSection(&g_criticalSection);
百事烟 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jiuzhoulh 的回复:]

看看你的g_mutex是如何创建的
[/Quote]
+1
见习学术士 2011-08-29
  • 打赏
  • 举报
回复
怎么不用 EnterCriticalSection LeaveCriticalSection
laumore 2011-08-29
  • 打赏
  • 举报
回复
怀疑你的g_mutex是一直有信号的,创建函数的参数看看
hsLi001 2011-08-29
  • 打赏
  • 举报
回复
判断一下WaitForSingleObject的返回值
jiuzhoulh 2011-08-29
  • 打赏
  • 举报
回复
看看你的g_mutex是如何创建的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧