开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
pthread
问题(Question):
最近在做多执行绪的实作遇到两个问题
1.
因为pthread_create要呼叫的函式需要的参数是用指标宣告
所以函式的参数宣告成(void *)
我用一个args array传入参数
那这个参数在函式中该怎么取用呢
我写的直接用arg[0], arg[1]应该是错的
compiler会有dereferencing "void *" pointer的warning
2.
另外最后我想要divide成两个部份给两个执行绪去执行
呼叫的pthread_create的第三个&第四个参数
直接给函式名字&新的存参数array这样是对的吗
错误结果(Wrong Output):
dereferencing "void *" pointer的warning
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
int Partition(int p, int r) {
...
return q;
}
void* func(void *arg) {
pthread_attr_t attr;
pthread_t thread_L;
pthread_t thread_R;
pthread_attr_init(&attr);
int p = arg[0];
int r = arg[1];
if (p < r) {
int q = Partition(p, r);
int arg_L[2] = { p, q-1 };
int arg_R[2] = { q+1, r };
//QuickSort(arg_L);
if(pthread_create(&thread_L, NULL, func, arg_L)) {
fprintf(stderr, "error an exit\n");
return NULL;
}
//QuickSort(arg_R);
if(pthread_create(&thread_R, NULL, func, arg_R)) {
fprintf(stderr, "error an exit\n");
return NULL;
}
pthread_join(thread_L, NULL);
pthread_join(thread_R, NULL);
}
}
int main(int argc, char *argv[]) {
...
int args[2] = { p, r };
func(args);
}
补充说明(Supplement):
抱歉对指标的概念不是很好,还请前辈们多多赐教,感谢万分