关于pthreads&的问题指针

时间:2011-09-21 16:57:44

标签: multithreading pthreads

以下是经常看到的线程创建代码示例。 pthread_create使用了很多指针/地址,我想知道为什么会这样。

    pthread_t threads[NUM_THREADS];
    long t;
      for(t=0; t<NUM_THREADS; t++){
          rc = pthread_create(&threads[t], NULL, &someMethod, (void *)t);
      }

使用'&amp;'是否有一个主要优势或区别引用变量数组'threads'以及'someMethod'(而不仅仅是'threads'和'someMethod')?而且,为什么't'通常作为空指针传递而不仅仅是't'?

1 个答案:

答案 0 :(得分:2)

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
    void *(*start_routine)(void*), void *arg);

您需要将pointer传递给pthread_t变量pthread_create&threads[t]threads+t实现此目标。 threads[t]没有。 pthread_create需要一个指针,以便它可以通过它返回一个值。

someMethod是第三个参数的合适表达式,因为它是函数的地址。我认为&someMethod是多余的,但我不确定。

您要将t投射到void *,以便将long放入void *。我认为long不能保证适合void *。即使保证存在,它也绝对是次优解决方案。为了清晰起见,您应该将指针传递给t&t,不需要强制转换)并确保与预期的void *兼容。不要忘记相应地调整someMethod


pthread_t threads[NUM_THREADS];
long t;
for (t=0; t<NUM_THREADS; t++) {
    rc = pthread_create(&threads[t], NULL, someMethod, &t);
}