我一直在用线程实现 Strassen 算法。我已经通过结构将数据传递给线程并通过函数启动它们pthread_create()
。问题是我正在操作 std::vector < std::vector<int> >
,我不能通过引用将它传递给结构。我做了一些研究并决定使用std::ref
它来包装内容并将其发送到功能。退出功能后问题开始;r1 值没有变化(内部变化),所以有些地方不正确。
示例代码:
typedef struct threadData
{
int n;
std::vector< std::vector<int> > mat1;
std::vector< std::vector<int> > mat2;
std::vector< std::vector<int> > result;
}thread_Data;
/* function adding 2 matrixes */
void *add_Thread(void *arg)
{
thread_Data *data = (threadData*)arg;
for (int i = 0; i < data->n; ++i)
{
for (int j = 0; j < data->n; ++j)
{
data->result[i][j] = data->mat1[i][j] + data->mat2[i][j];
}
}
pthread_exit(0);
}
/* ... code ... */
thread_Data adds;
adds = thread_Data{newSize, a11, a22, std::ref(r1)}; // here passing by std::ref
pthread_t adder;
pthread_create(&adder, NULL, add_Thread, &adds[i]);
pthread_join(adder, NULL);
/* and r1 value does not change here */
如何解决?
注意: *add_Thread() 工作正常;我在我的程序中使用数组。这里的代码只是为了展示想法。