gpt4 book ai didi

c++ - 使用简单的 CRITICAL_SECTION,似乎陷入僵局

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:28:11 26 4
gpt4 key购买 nike

我有一个使用 CRITICAL_SECTION 的简单 C 程序。由于某种原因,它似乎一次又一次地进入CRITICAL_SECTION并没有真正执行里面的代码,导致线程死锁。我似乎找不到原因。

代码如下:

#include <windows.h>
#include <iostream>

#define N 100000000

CRITICAL_SECTION cs;

static DWORD WINAPI safe_increment(void *param)
{
volatile long* x = (volatile long*)param;
for(int i=0;i<N;++i)
EnterCriticalSection(&cs);
++(*x);
LeaveCriticalSection(&cs);
return 0;
}

void main()
{
InitializeCriticalSection(&cs);

volatile long x = 0;

HANDLE h[2];
DWORD thread_id;

int x = 0;

h[0] = CreateThread(NULL,0,safe_increment,(void*)&x,0,&thread_id);
h[1] = CreateThread(NULL,0,safe_increment,(void*)&x,0,&thread_id);
WaitForMultipleObjects(2,h,TRUE,INFINITE);
CloseHandle(h[0]);
CloseHandle(h[1]);

DeleteCriticalSection(&cs);

std::cout << "Result of safe increment: " << x << "\n";
}

谢谢!

罗伊。

最佳答案

for 循环中的错误。应该是:

for(int i=0;i<N;++i)
{ // <---
EnterCriticalSection(&cs);
++(*x);
LeaveCriticalSection(&cs);
} // <---

没有大括号,所以 for 循环只执行了 EnterCriticalSection() 而没有执行任何其他操作。获得临界区的第一个线程从未释放它:死锁

关于c++ - 使用简单的 CRITICAL_SECTION,似乎陷入僵局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com