Я настроил несколько потоков, каждый из которых будет заполнен несколькими значениями, и он должен сделать запрос к БД и вернуть несколько значений.
Один поток может отображать правильные значения, но что-то пошло не так, когда они возвращают значения в основную функцию.
Основная функция:
for(int i=0; i<n; i++){
struct thread_args* args = malloc(sizeof(*args));
args->str = str;
args->tri_input = tri_input;
args->length = length;
res = pthread_create(&t_id[i], NULL, threads, args);
if(res != 0)
printf("Failed to create %d th thread.\n", i);
}
for(int i=0; i<n; i++){
void *returnRes;
pthread_join(t_id[i], &returnRes);
indicesArr[i] = returnRes;
printf("in main thread, indicesArr[%d].length: %d\n", i, indicesArr[i] -> length);
}
Одиночный поток:
void *threads(void *args_){
struct thread_args *args = (struct thread_args *)args_;
char* str = args -> str;
struct IntArrLenArr* indicesArr = NULL;
indicesArr = malloc(sizeof(*indicesArr));
int length = args -> length;
PGconn *dbconn = DBconnect(str);
*indicesArr = duncitonReturnIndicesArr(dbconn);
printf("in threads, indicesArr -> length: %d\n", indicesArr->length);
free(args);
PQfinish(dbconn);
return indicesArr;
}
Результат был следующим:
in threads, indicesArr -> length: 0
in threads, indicesArr -> length: 0
in threads, indicesArr -> length: 4
in threads, indicesArr -> length: 0
in threads, indicesArr -> length: 0
in threads, indicesArr -> length: 4
in threads, indicesArr -> length: 4
in threads, indicesArr -> length: 0
in main threads, indicesArr[0].length: -1949512500
in threads, indicesArr -> length: 2
in threads, indicesArr -> length: 4
in threads, indicesArr -> length: 4
in threads, indicesArr -> length: 1
in threads, indicesArr -> length: 4
Process returned -1073741819 (0xC0000005) execution time : 6.551 s
Press any key to continue.
Кажется хорошо работает, если он скомпилирован mingw64 на win10, но мне как-то приходится компилировать его в 32-битной версии. Моя IDE - это Codeblocks, отличается от mingw64, мне пришлось добавить там компоновщик MinGW\lib\libpthread_s.dll.a
и MinGW\lib\libpthread.a
, когда я скомпилировал его с помощью mingw32. Я не знаю, может ли это быть проблемой? и как я мог это исправить?