【问题标题】:C thread argumentC 线程参数
【发布时间】:2011-08-15 11:43:02
【问题描述】:

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

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);
}

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

【问题讨论】:

    标签: c pointers pthreads


    【解决方案1】:

    使用

    (void *) i
    

    在 pthread_create 中

    然后

    int i = (int) arg
    

    【讨论】:

    • 谢谢,但我收到了一个警告:从函数'main'中的gcc转换为不同大小的整数的指针
    • 请检查,您的平台上是否有 sizeof(int)==sizeof(void*)
    • 您的问题是您正在以 64 位编译。尝试启动 file your_executable,它应该会告诉您它是 x86_64。 2 解决方案:在编译代码时使用-m32,或将您的 int 转换为 long int
    • 或者关闭虚假的 gcc 警告。
    【解决方案2】:
    int n = (int)arg;
    

    在你的 worker_thread 函数中。

    (void*)i
    

    在你的线程生成中而不是&amp;i

    【讨论】:

    • 由于某种原因,我将地址打印出来
    • 谢谢!但我收到一个警告:从主函数转换为不同大小的整数的指针
    • 我确实有 long long n = (long long)arg;和 (void *)i tho =\
    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2015-04-03
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多