gpt4 book ai didi

c++ - 大量关键部分有任何问题吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:24 25 4
gpt4 key购买 nike

我有大量的结构,像这样:

typedef struct
{
int a;
int b;
int c;
etc...
}
data_type;

data_type data[100000];

我有一堆独立的线程,每个线程都想对 data[] 中的元素进行更改。我需要确保没有线程尝试同时访问相同的数据元素。准确地说:一个线程执行 data[475].a = 3;另一个线程执行 data[475].b = 7;不允许同时执行,但一个线程执行 data[475].a = 3;而另一个线程执行 data[476].a = 7;被允许。该程序对速度高度至关重要。我的计划是为每个数据元素创建一个单独的关键部分,如下所示:

typedef struct
{
CRITICAL_SECTION critsec;
int a;
int b;
int c;
etc...
}
data_type;

从某种意义上说,我想它应该都能正常工作,我应该没有真正的问题,但在多线程编程方面没有太多经验,我只是对有这么多关键部分感到有点不安。我想知道它们的数量是否会造成某种低效率。我还想知道其他一些多线程技术是否可以更快?我应该放松一下并继续执行 A 计划吗?

最佳答案

有了这么多的对象,它们的大部分临界区都会被解锁,几乎不会有争用。正如您已经知道的(其他评论),如果关键部分是无主的,则不需要内核模式转换。这使得关键部分在这种情况下变得高效。

唯一的其他考虑因素是您是否希望将关键部分放在对象内部或另一个数组中。引用的局部性是将关键部分放在对象内部的一个很好的理由。当您进入关键部分时,整个缓存行(例如 16 或 32 字节)将在内存中。通过一些填充,您可以确保每个对象都从缓存行开始。因此,一旦进入临界区,对象将(部分)在缓存中。

关于c++ - 大量关键部分有任何问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1666537/

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