用參數創建線程的最有效方法是什麼?參數是一個結構,如果結構不能停留在父線程堆棧上,則有兩種解決方案。線程參數的高效快捷方式
動態內存分配
struct Arg{
int x;
int y;
};
void* my_thread(void* v_arg){
Arg* arg = (Arg*) v_arg;
//... running
delete arg;
return NULL;
}
//Creating a thread
void a_function(){
Arg* arg = new Arg;
arg->x = 1; arg->y = 2;
pthread_t t;
pthread_create(&t, NULL, my_thread, arg);
pthread_detach(t);
}
用旗語
struct Arg{
sem_t sem;
int x;
int y;
};
void* my_thread(void* v_arg){
Arg* arg = (Arg*) v_arg;
int arg_x = v_arg->x;
int arg_y = v_arg->y;
sem_post(&(v_arg->sem));
//... running
return NULL;
}
//Creating a thread
void a_function(){
Arg arg;
arg.x = 1; arg.y = 2;
sem_init(&(arg.sem), 0, 0);
pthread_t t;
pthread_create(&t, NULL, my_thread, &arg);
pthread_detach(t);
sem_wait(&(arg.sem));
sem_destroy(&(arg.sem));
}
我與Linux和Windows上工作。
這段代碼表明你正在使用一些C風格的語言,我從你在Linux中進行編程的事實推斷出它是C,但我無法確定。因爲它與問題高度相關,您能否用所用語言標記問題,和/或提供一些更具體的問題? – KeithS 2011-02-17 17:57:56
@KeithS:在Linux上它肯定看起來像C或C++(他使用`pthreads`),但類似的代碼可以用於Windows,並且我記得他的問題在兩個平臺上都是有效的。 – Argote 2011-02-17 18:04:04