我正在使用 for 循环创建多个线程并将索引 i 作为参数传递,如下所示:
pthread_t p[count];
for (int i = 0; i < count; i++){
pthread_create(&p[i], NULL, &somefunc, (void*)&i);
}
然后我尝试检索 i 的值:
void *somefunc (void* ptr){
int id = *(int*)ptr;
}
但是,我注意到有时,线程中的 id 会有重叠的值,我怀疑这是由于在线程能够检索值之前更新 for 循环的索引(因为我传入了指针,而不是值本身)。有没有人有任何建议可以在不减慢 for 循环的情况下克服这个问题?
谢谢