如何在 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 中同步线程的主要内容,如果未能解决你的问题,请参考以下文章