c - 如果在这段代码中直接将变量 i 传递给线程会发生什么?

标签 c multithreading

#include <pthread.h>
#include <stdio.h>
#include <math.h>
#include <stdio.h>
#include <pthread.h>
#define NO_OF_THREADS 5

void print_function(int* i)
{
 int count;
 for(count=0; count<10; count++)
  printf("Hello world from thread %d\n",*i);
 pthread_exit(NULL);
}

int main()
{
 pthread_t printThreads[NO_OF_THREADS];
 int thread_no[NO_OF_THREADS];
 int i;

 for(i=0; i<NO_OF_THREADS; i++)
 {
  thread_no[i] = i;
  pthread_create(&printThreads[i], NULL, print_function,&thread_no[i]);
 }

 int j;
 for(j=0;j<NO_OF_THREADS;j++)
  pthread_join(printThreads[j],NULL);
 puts("Main over and out");
 return 0;
}

不只是将计数器变量 i 的地址作为参数直接传递 对于 pthread_create 函数,它首先被分配给一个数组的一个未使用的槽 然后数组元素的地址作为参数传递。这个做完了 避免在父线程和创建的线程之间访问 i 的竞争条件。 解释如果变量 i 直接传递给线程会发生什么。

最佳答案

当然,变量可以“直接”传递而没有风险,只要它成功转换为 void * 即可。如果使用该方法,则不需要每线程缓冲。

传递单个位置的地址(main()i 的地址),其内容随着更多线程的创建而变化,是当然是疯狂。

关于c - 如果在这段代码中直接将变量 i 传递给线程会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19158543/

相关文章:

c - 文件处理 C 程序可以读取的格式

根据其他结构成员创建结构

c - 为什么 pthread 条件变量不起作用

c - 指向链表的指针数组

java - 捕获 Java 中特定线程的控制台输出

java - AsyncTask 和 Thread 不会在 java/android 应用程序中运行两次

android - await 是否阻塞了 Android 上的 UI 线程?

c++ - 在 C++ 中取消引用 void 指针

java - 我需要将标志放入同步块(synchronized block)中吗?

java - 为什么我的 TCP 服务器套接字在一个客户端失去连接后关闭?