两个或多个std::threads如何操作同一个函数?
How do two or more std::threads operate on the same function?
我正在开发一个 C++ 程序,我在其中处理几对数据(数组和矩阵)。由于时间要求,我需要并行处理相应的对,为此我打算使用 std::threads。由于它们将调用相同的函数,因此我需要确保它们永远不会干扰彼此的操作。
我想知道是否每个线程都创建自己的调用堆栈,不同线程调用的同一个函数的局部函数变量对于调用者来说是唯一的。
此外,所有线程都需要写入同一输出数组的不同部分。即使他们不写入数组的同一部分也会导致问题吗?
你很好。
每个线程都有自己的堆栈,当两个线程写入或读取不同的内存位置时,不会出现竞争条件。
您的案例中的潜在陷阱是:
- 您的函数写入全局变量。
- 您的函数通过引用获取参数并改变它们。
- 您的输出数组中有两个线程都访问的位置。
附带说明一下,如果并行化如此简单,那么看看 OpenMP 或类似的东西可能会很有趣,这些东西使这种并行化相当简单。
我正在开发一个 C++ 程序,我在其中处理几对数据(数组和矩阵)。由于时间要求,我需要并行处理相应的对,为此我打算使用 std::threads。由于它们将调用相同的函数,因此我需要确保它们永远不会干扰彼此的操作。
我想知道是否每个线程都创建自己的调用堆栈,不同线程调用的同一个函数的局部函数变量对于调用者来说是唯一的。
此外,所有线程都需要写入同一输出数组的不同部分。即使他们不写入数组的同一部分也会导致问题吗?
你很好。
每个线程都有自己的堆栈,当两个线程写入或读取不同的内存位置时,不会出现竞争条件。
您的案例中的潜在陷阱是:
- 您的函数写入全局变量。
- 您的函数通过引用获取参数并改变它们。
- 您的输出数组中有两个线程都访问的位置。
附带说明一下,如果并行化如此简单,那么看看 OpenMP 或类似的东西可能会很有趣,这些东西使这种并行化相当简单。