[问题] pthread及参数为指标的问题

楼主: skyHuan (Huan)   2018-10-11 13:17:03
开发平台(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):
抱歉对指标的概念不是很好,还请前辈们多多赐教,感谢万分
作者: descent (“雄辩是银,沉默是金”)   2018-10-11 17:25:00
你的 func() 怎么自己又要 create thread?是 Partition 吗?
作者: Ryspon (Ry)   2018-10-11 17:35:00
int p = (int) arg[0]
作者: achicn3 (Sher)   2018-10-11 18:13:00
int p,q;改intptr_t型态
作者: joe820730 (Let it go)   2018-10-11 19:41:00
https://ideone.com/tQloW0在thread里面建一个变量把转型后的指标存起来
作者: Ryspon (Ry)   2018-10-11 20:20:00
void * 算是一个通用型态的概念,用来传递各种型态的参数,传进去之后要自己转型成需要的 type ,把 arg 转型后 assign 给你想要的 type pointer ,就像前几楼回复的范例那样
作者: Paravion (ElonMusk)   2018-11-01 19:07:00
是作业系统的merge sort作业吗

Links booklink

Contact Us: admin [ a t ] ucptt.com