【发布时间】:2015-01-29 00:37:26
【问题描述】:
1.问题:我需要将一个包含两个整数的结构传递给 pthread_create 调用。
这是在计算结构值的 for 循环中。理想情况下,我希望每个线程使用不同的结构调用 updatePlates()。
2。问题:我创建了结构 {1,2},{3,4},{5,6},但是当线程开始工作时,它们都具有 {5,6} 的值。我的不正确理解 Tuple t; 是每次循环迭代的一个新的临时变量。但是我的调试语句cout<< "t: " << &t << endl; 显示它们在每个循环中都有相同的内存地址。
3.真正的问题:创建“新”结构并将其传递给具有唯一非共享值的每个线程的正确方法是什么?
pthread_t updateThreads[THREADS];
for(size_t i = 0; i < THREADS; ++i)
{
Tuple t;
t.start = 1 + (i * increment);
t.end = t.start + increment -1;
// Debug Statements //
cout << "start: " << t.start <<endl;
cout << "end: " << t.end <<endl;
cout << "t: " << &t <<endl;
// End Debug //
returnCode = pthread_create(&updateThreads[i], NULL, updatePlates, (void *)&t);
}
for(size_t i = 0; i < THREADS; ++i)
{
pthread_join(updateThreads[i], NULL);
}
【问题讨论】:
-
具有潜在答案的类似问题。 stackoverflow.com/questions/2576558/…
标签: c++ multithreading struct pthreads