【发布时间】:2011-02-17 17:54:01
【问题描述】:
用参数创建线程最有效的方法是什么?参数是一个struct,如果struct不能留在父线程栈上,有两种解决方案。
动态内存分配
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。
【问题讨论】:
-
sn-p 表示您正在使用某种 C 风格的语言,我从您在 Linux 中编程这一事实推断它是 C,但我无法确定。由于它与问题高度相关,您能否用所使用的语言标记问题,和/或提供更多细节?
-
@KeithS:这绝对看起来像 Linux 上的 C 或 C++(他使用的是
pthreads),但类似的代码可用于 Windows,据我记得他的问题在两个平台上都有效。 -
它是 C++,但可以使用 C。 Windows 有 pthreads。我以 pthreads 为例。
标签: c++ c multithreading performance pthreads