如何在 Visual C++ 2010 中同步线程
Posted
技术标签:
【中文标题】如何在 Visual C++ 2010 中同步线程【英文标题】:how do I synchronize threads in Visual C++ 2010 【发布时间】:2014-01-27 06:54:19 【问题描述】:VC++ 2010 似乎不支持互斥锁。我有一个功能如下。
DWORD WINAPI WatchItThreadProc(LPVOID lpParam)
int *t=static_cast<int*>(lpParam);
while (true)
short cpuUsage = usage.GetUsage(DWORD(*t));
printf("Thread id %d: %d%% cpu usage\n", *t, cpuUsage);
Sleep(500);
在主函数中,我创建了两个线程,如下所示。
DWORD i1=2632;
DWORD i2=4040;
void *p1=&i1;
void *p2=&i2;
CreateThread(NULL, 0, WatchItThreadProc, p1, 0, NULL);
CreateThread(NULL, 0, WatchItThreadProc, p2, 0, NULL);
我需要同步这两个线程以避免竞争条件。我如何使用 Visual C++ 2010 实现它?
【问题讨论】:
是什么让您认为 2010 不支持互斥锁?见这里msdn.microsoft.com/en-us/library/windows/desktop/… 【参考方案1】:支持互斥锁。 参考:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682411(v=vs.85).aspx
您需要做的就是 CreateMutex()、WaitForSingleObject() 和后来的 ReleaseMutex() 来同步您的两个线程。您可能忘记了指向 Kernel32 库的链接。
【讨论】:
以上是关于如何在 Visual C++ 2010 中同步线程的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2010 中“全部中断”后,我的 C++ 程序中大部分都缺少一些线程的调用堆栈
Visual C++ 2010 中的 STL 映射实现和线程安全
使用 Visual C++ (2010) 在 64 位版本中生成 CMPXCHG(无 LOCK)
在 Visual C++ 2005 中开发的 Visual C++ 项目 - 在 Visual C++ 2010 中,打开菜单时调试断言失败,但发布模式有效,如何解决?