C线程参数

C线程参数,c,pointers,pthreads,C,Pointers,Pthreads,我的程序的基本功能:创建计数器数量(0),创建每个线程的指令数量,创建包含计数器*、重复和工作(递增、递减等)的结构指令。 程序将构建所有动态结构(已编码) 然后生成线程并加入。一个线程可以有多条指令 static void* worker_thread(void *arg){ long long *n; pthread_mutex_lock( &lock1 ); n = (long long *) arg; printf("Testing: %lld.\n", n);

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

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);
}
static void*worker\u线程(void*arg){
长*n;
pthread_mutex_lock(&lock1);
n=(长*)arg;
printf(“测试:%lld.\n”,n);
pthread_mutex_unlock(&lock1);
返回NULL;
}
//nthreads是线程总数
对于(int i=0;i
我正在尝试测试线程函数,首先创建多个线程,然后加入它们。 但在我的例子中,我似乎无法将当前线程号[I]传递给worker线程函数

int n = (int)arg;
在worker_线程函数中

int n = (int)arg;

而不是线程繁殖中的
&i

在worker_线程函数中

int n = (int)arg;

使用

(void *) i
在pthread_中创建

然后

int i = (int) arg
使用

在pthread_中创建

然后

int i = (int) arg

不知什么原因,我把地址打印出来了。谢谢!但我得到了一个警告:从与主函数大小不同的整数强制转换到指针我确实有long long n=(long long)arg;(void*)i tho=\不知什么原因,我把地址打印出来了,谢谢!但我得到了一个警告:从与主函数大小不同的整数强制转换到指针我确实有long long n=(long long)arg;和(void*)i tho=\谢谢你,但我得到了一个警告:在函数“main”中,从与gcc大小不同的整数转换为指针。请检查,在你的平台上,sizeof(int)==sizeof(void*)你的问题是,你正在编译64位。尝试启动一个
文件作为您的可执行文件,它会告诉您它是x86\u 64。2种解决方案:编译代码时使用
-m32
,或者将int转换为长int。或者关闭伪造的gcc警告。谢谢,但我得到了一个警告:在函数“main”中,从与gcc大小不同的整数转换为指针请检查,是sizeof(int)=sizeof(void*)在您的平台上,您的问题是您正在以64位进行编译。尝试启动一个
文件作为您的可执行文件,它会告诉您它是x86\u 64。2种解决方案:编译代码时使用
-m32
,或者将int转换为long int。或者关闭伪gcc警告。