如何在 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 中,打开菜单时调试断言失败,但发布模式有效,如何解决?

如何在 Visual C++ 2010 中使用 C++ 库 [重复]

Visual studio 2010 C++用Release运行是单线程吗?怎样提高运算速度?