【问题标题】:Question about pthreads & pointers关于 pthread 和指针的问题
【发布时间】:2011-09-21 16:57:44
【问题描述】:

这是一个常见的线程创建代码示例。 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);
      }

使用“&”来引用变量数组“threads”和“someMethod”(而不是“threads”和“someMethod”)是否有主要优势或区别?还有,为什么't'通常作为空指针而不是't'传递?

【问题讨论】:

    标签: multithreading pthreads


    【解决方案1】:
    int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
        void *(*start_routine)(void*), void *arg);
    

    您需要将pointer 传递给pthread_t 变量到pthread_create&amp;threads[t]threads+t 实现了这一点。 threads[t] 没有。 pthread_create 需要一个指针,因此它可以通过它返回一个值。

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

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


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

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2015-09-27
      • 2023-01-08
      • 2011-11-08
      • 1970-01-01
      相关资源
      最近更新 更多