c/c++语言开发共享对pthread_create()中的参数感到困惑

我的问题:为什么不直接传递&i作为pthread_create()的最后一个参数? 相反,他创建一个数组来保持相同的东西….

#define THREAD_CT 2 /* bump this up a few numbers if you like */ void *print_stuff(void *ptr) { int i, id= * (int *) ptr; for (i= 0; i < 5; i++) { printf("Thread %d, loop %d.n", id, i); sleep(rand() % 2); /* sleep 0 or 1 seconds */ } printf("Thread %d exiting.n", id); return NULL; } int main(void) { pthread_t tids[THREAD_CT]; int i, ids[THREAD_CT]; for (i= 0; i < THREAD_CT; i++) { ids[i]= i; pthread_create(&tids[i], NULL, print_stuff, &ids[i]); printf("Main thread created thread %d (ID %ld).n", i, tids[i]); } for (i= 0; i < THREAD_CT; i++) { pthread_join(tids[i], NULL); printf("Main thread reaped thread %d (ID %ld).n", i, tids[i]); } return 0; } 

    为什么不直接传递&i作为pthread_create()的最后一个参数?

    因为如果你这样做,所有线程将共享地址i并且线程之间将存在数据竞争。

    另一种方法是将值转换为:

     pthread_create(&tids[i], NULL, print_stuff, (void *)i); 

    但是这个整数到指针的转换具有实现定义的行为。 所以你现在的方式可能是最好的方式

    另请注意, rand()不是线程安全的。

      以上就是c/c++开发分享对pthread_create()中的参数感到困惑相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      www.ctvol.com true Article c/c++语言开发共享对pthread_create()中的参数感到困惑

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549420.html

      (0)
      上一篇 2021年1月14日 上午4:39
      下一篇 2021年1月14日 上午4:41

      精彩推荐