for (int i = 0; i < numofthread; ++i) {
struct SelectPara para{};
para.dirlist = dirvector;
para.filelist = filevector;
para.path1 = strdup( filepath_extract_select );
para.dir1 = strdup(realdir);
if (inputpassword){
para.password = strdup(p);
} else{
para.password = nullptr;
}
pthread_t thread;
pthread_create(&thread, nullptr, doExtract1_select, (void *) ¶);
threads.push_back(thread);
}
这段代码是有机会出错的,根本原因在于pthread_create开始的时候,参数没传进去也已经开始了新的线程。也就是说,线程开始和传参是分开的。pthread_create开始的时候,已经是并发了,而不是参数传完才开始。所以,当进行传参的时候,这个参数是不确定的。
正确的写法是将参数先构造出来放到集合里。后面顺序取。