两个或多个std :: threads如何在同一个函数上运行?

时间:2015-08-10 08:20:51

标签: c++ multithreading stdthread

我正在开发一个C ++程序,我正在处理几对数据(数组和矩阵)。由于时间要求,我需要并行处理相应的对,我打算使用std :: threads来达到这个目的。由于他们将调用相同的功能,我需要确保他们永远不会与彼此混淆#39;操作。

我想知道每个线程是否创建自己的调用堆栈,并且由不同线程调用的同一函数的本地函数变量对于调用者来说是唯一的。

此外,所有线程都需要写入同一输出数组的不同部分。即使它们没有写入数组的相同部分,它是否会引起问题?

1 个答案:

答案 0 :(得分:2)

你没事。

每个线程都有自己的堆栈,当两个线程写入或读取不同的内存位置时,没有竞争条件。

您案件的潜在缺陷将是:

  • 您的函数会写入全局变量。
  • 您的函数通过引用获取参数并对其进行变异。
  • 输出数组中有两个线程都可以访问这些位置。

作为旁注,如果并行化就这么简单,那么看看OpenMP或类似的东西可能会很有趣,这使得这种并行化变得相当简单。