我设置了几个线程,每个线程都将填充多个值,并且应该向数据库查询并返回多个值。
单线程可以显示正确的值,但是当它们将值返回到主函数时出了点问题。
主要功能是:
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是代码块,从mingw64不同,我不得不添加一个链接MinGW\lib\libpthread_s.dll.a
,并MinGW\lib\libpthread.a
在那里当我的mingw32编译。我不知道这可能是问题吗?我该如何解决?
我返回值的方式实际上不是问题。那是我使用的库的问题。因此,我使用Mingw安装管理器(默认情况下应安装)来重新安装min3gw2-libpthread...
库。而且有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句