gpt4 book ai didi

c++ - 如何解决忙等待许多正在运行的线程

转载 作者:行者123 更新时间:2023-11-28 02:53:48 26 4
gpt4 key购买 nike

我写了一个多线程程序:

#include <Windows.h>
#include <process.h>
#include <stdio.h>
#include <fstream>
#include <iostream>
using namespace std;
ofstream myfile;
BYTE lockmem=0x0;
unsigned int __stdcall mythreadA(void* data)
{
__asm
{
mov DL,0xFF
mutex:
mov AL,0x0
LOCK CMPXCHG lockmem,DL
jnz mutex
}

// Enter Critical Section
for (int i = 0; i < 100000; i++)
{
myfile << "." << i << endl;
}
// Exit Critical Section
__asm
{
lock not lockmem
}
return 0;
}

int main(int argc, char* argv[])
{
myfile.open ("report.txt");
HANDLE myhandleA[10];
//int index = 0;
for(int index = 0;index < 100;index++)
{
myhandleA[index] = (HANDLE)_beginthreadex(0, 0, &mythreadA, 0, 0, 0);
}
getchar();
myfile.close();
return 0;
}

在临界区,我编写内联代码以确保临界区中只有一个线程。(在这个程序中,我不想使用 API 和函数来实现临界区中唯一的一个线程,所以我使用内联集会 )。现在我有忙等待的问题。因为一个线程进入临界区后,其他线程在临界区之前的循环中很忙,所以 cpu 的进程不断上升!我在这里寻找解决忙等待问题的方法。 (我更喜欢使用汇编指令而不是 API 和任何函数,但我也想知道它们)

最佳答案

你做的基本上就是自旋锁,不应该用于长操作。正如您所描述的那样,这是耗尽 CPU 时间的预期结果。

然而,您可以基于自旋锁和 condvar/event 构建一个互斥锁,即 futex(快速用户模式互斥锁)。

关于c++ - 如何解决忙等待许多正在运行的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22448765/

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