考虑以下代码:
typedef double (*fpointer)(void*);
typedef struct {
int data1;
double data2;
} data_t;
double stuff(void* arg) {
data_t *d = (data_t *)arg;
...
// Do random things
...
return data2;
}
并考虑我有一个非阻塞功能:
void func(fpointer f, data_t* d)
它基本上运行f(d)
但立即返回而不等待f(d)
完成(类似于 MPI_Isend/MPI_Irecv 之类的东西)。
现在我想运行func
数百次,但使用不同的数据。像下面的代码这样的东西在不抑制竞争条件的情况下可以安全运行吗?如果它确实表现出未定义的行为,那么在不创建数百个数据结构的情况下完成此类任务的替代方法是什么?
data_t d;
d.data1 = 1;
d.data2 = 1.5;
for (int i = 0; i < 1000; i++) {
d.data2 += 1.0;
func(stuff, &d);
}
如果您需要更多说明,请告诉我。我很感激任何帮助。