Re: [問題] pthread及參數為指標的問題

作者: descent (「雄辯是銀,沉默是金」)   2018-10-11 18:26:20
#include <stdio.h>
int ret;
void *(myf) (void *arg)
{
int *my_arg_L = (int *)arg;
printf("myf arg: %p\n", arg);
printf("my_arg_L: %d, %d\n", my_arg_L[0], my_arg_L[1]);
ret = 99;
return &ret;
}
int create(void *(*start_routine) (void *), void *arg)
{
printf("arg: %p\n", arg);
start_routine(arg);
return 0;
}
int main(int argc, char *argv[])
{
int p=2, q=100;
int arg_L[2] = { p, q-1 };
printf("arg_L: %p\n", arg_L);
int r = create(myf, (void *)arg_L);
printf("r: %d\n", r);
return 0;
}
模擬的程式行為, 讓你參考看看。
※ 引述《skyHuan (Huan)》之銘言:
: 開發平台(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
作者: skyHuan (Huan)   2018-10-11 22:45:00
感謝您還想了一個例子,我對函式間的傳遞呼叫有更了解了!另外請問一個問題,您create韓式的參數宣告void *(*start_routine) (void *),我的理解是create收一個void型別的地址,這個地址是函式(*start_routine) (void *)的地址,所以呼叫時直接傳myf,意思是myf這個函式在當引數時是以這個函式的地址傳入,這樣對嗎
作者: Lipraxde (Lipraxde)   2018-10-11 23:57:00
start_routine 是一個 point 指向回傳 void * 的 function
作者: x246libra (楓)   2018-10-12 00:06:00
變數怎麼唸 可以看這篇 https://bit.ly/2PtkDmO
作者: skyHuan (Huan)   2018-10-12 00:12:00
懂了!感謝大家這個板真的好多大神有你們真好><

Links booklink

Contact Us: admin [ a t ] ucptt.com