【发布时间】:2009-11-03 10:38:05
【问题描述】:
我有大量的结构,像这样:
typedef struct
{
int a;
int b;
int c;
etc...
}
data_type;
data_type data[100000];
我有一堆单独的线程,每个线程都想修改 data[] 中的元素。我需要确保没有线程尝试同时访问相同的数据元素。准确地说:一个线程执行数据[475].a = 3;另一个线程执行 data[475].b = 7;不允许同时执行数据[475].a = 3;而另一个线程执行 data[476].a = 7;被允许。该程序对速度高度至关重要。我的计划是为每个数据元素创建一个单独的关键部分,如下所示:
typedef struct
{
CRITICAL_SECTION critsec;
int a;
int b;
int c;
etc...
}
data_type;
从某种意义上说,我想这一切都应该工作,我应该没有真正的问题,但在多线程编程方面没有太多经验,我只是对有这么多关键部分感到有点不安。我想知道他们的数量是否会造成某种低效率。我还想知道其他一些多线程技术是否会更快?我应该放松一下并继续执行 A 计划吗?
【问题讨论】:
-
注意:变量数组可能会在线程之间引入错误的共享。您应该真正将您的结构对齐到 CACHELINE 倍数。
-
听起来很有趣——但我不太明白你在说什么。您能否对此进行扩展或将我指向一篇文章?
-
如果我在谷歌中输入 ["csheline multiples" threads] 我得到零点击:-(
-
那是因为您应该复制粘贴该术语,这样可以节省您的打字错误。 “CACHELINE multiples”获得超过 131.000 次点击。
-
好点...我猜你在谈论这种现象:ddj.com/go-parallel/article/…
标签: c++ visual-studio visual-studio-2008 multithreading