2011-04-29 38 views
0

我的程序的基本功能:创建计数器数(0),为每个线程创建指令数,创建包含计数器*,重复和work_fn(增量,减量等)的结构指令。 程序将构建所有的动态结构(已经编码) 然后产生线程并加入。一个线程可以有多个指令。C线程参数

static void* worker_thread(void *arg){ 
    long long *n; 
    pthread_mutex_lock(&lock1); 

    n = (long long *) arg; 
    printf("Testing: %lld.\n", n); 

    pthread_mutex_unlock(&lock1); 

    return NULL; 
} 

//nthreads is the total number of threads 

for(int i=0; i < nthreads ; i++){ 
    pthread_create(&thread_id[i], NULL, worker_thread, &i); //Problem 
} 


for(int i=0; i < nthreads ; i++){ 
    pthread_join(thread_id[i], NULL); 
} 

我想测试线程函数,首先创建线程数然后加入他们。 但我似乎无法将当前线程数[我]在我的情况下传递给工作线程函数。

回答

1
int n = (int)arg; 

在你的worker_thread函数中。

而且

(void*)i 

而不是&i在你的线程产卵

+0

由于某种原因,我得到的地址打印出来,而不是 – Jono 2011-04-29 12:51:57

+1

谢谢!但我得到了一个警告:转换为从主函数不同大小的整数指针 – Jono 2011-04-29 12:55:30

+0

我确实有很长的n =(long long)arg;和(void *)我tho = \ – Jono 2011-04-29 13:00:59

2

使用

(void *) i 
在在pthread_create

然后

int i = (int) arg 
+0

感谢了,但我得到了一个警告:从函数'main'中从gcc不同大小的整数转换为指针 – Jono 2011-04-29 12:54:18

+0

请检查,sizeof(int) ==你的平台上的sizeof(void *) – Igor 2011-04-29 13:03:49

+0

你的问题是你正在编译64位。尝试启动'文件your_executable',它应该告诉你它是x86_64。 2解决方案:编译代码时使用'-m32',或将_int_转换为_long int_。 – Gui13 2011-04-29 13:08:19