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

使用'&'来指代变量数组'线程'和' someemethod '(而不仅仅是'线程'和' someemethod ')是否有主要的优势或区别?而且,为什么't'通常传递作为一个空指针,而不是只是't'?

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

最新更新