用线程递归传递数据
Passing data recursively with threads
我试图通过线程递归传递值。
在我的示例中,我正在创建一个线程,然后传递了一些数据,此线程将递归创建另一个线程,这也传递了一些数据。
输出如下:
Thread 1: value = 8
Thread 2: value = 12318230
为什么即使我分配了值4?
根据我的理解(如果我错了,请纠正我),每个线程都有自己的堆栈。当我将值4传递给线程2(第一个线程创建的线程)时,该变量在内存中直到线程结束为止。由于我打电话给pthread_join,所以我等到孩子线程结束直到恢复。我不确定线程2的值是一个随机数。
int count = 0
typedef struct
{
int value;
} ThreadInfo;
void* ChildWork(void* a) {
pthread_t threadid;
count++;
if(count > 2)
pthread_exit(0);
ThreadInfo* info = (ThreadInfo*)a;
printf("value = %dn", info->value);
ThreadInfo* child = new ThreadInfo;
child->value = 4;
pthread_create(&threadid, NULL, ChildWork, (void*)&child);
pthread_join(threadid, NULL);
pthread_exit(0);
}
int main(int argc, const char *argv[])
{
pthread_t threadid;
ThreadInfo info;
info.value = 8;
pthread_create(&threadid, NULL, ChildWork, (void*)&info);
pthread_join(threadid, NULL);
return 0;
}
ThreadInfo* child = new ThreadInfo;
child->value = 4;
pthread_create(&threadid, NULL, ChildWork, (void*)&child);
&儿童是ThreadInfo**
,但子线将其投射到ThreadInfo*
并读取垃圾。将(void*)&child
更改为child
。
相关文章:
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 如何将从第 2 个字符开始的字符串作为函数中的参数传递以进行递归,并约束数据 tiee 是函数中的字符串?
- 递归如何使用堆栈数据结构
- 递归定义数组中的数据对齐和排序
- 递归地将 1 添加到 BST 中的所有节点,但具有最小数据的节点除外
- 我如何实现递归函数的模板,该模板允许C 中的许多不确定数据类型的参数
- 使用递归将数据类型放入数组中
- 用线程递归传递数据
- 协议缓冲区、Apache Thrift或任何其他数据结构序列化协议中的递归数据结构
- 递归类型真的是构建不连续的任意大小数据结构的唯一方法吗
- 递归数据结构的前向声明
- 有没有一种方法可以保留C++中以前递归的数据(具体示例)
- 从套接字递归处理数据
- 如何编写递归函数来计算图形数据结构中的最短路径
- 模板化的递归数据类型
- 非递归 Kosaraju 的两次传递算法实现需要很长时间才能在大型数据集上执行
- 用于树数据结构的递归函数
- C++向量在递归函数中丢失数据
- 共享指针递归地删除递归数据结构,堆栈溢出
- 如何用json精神读取递归json数据