问题标签 [pthread-join]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1692 浏览

android - Android/Linux 线程加入超时

是否有一个 pthreads API 调用可以做一些类似pthread_join()但有超时的事情?我正在寻找一个类似于 Windows WaitForSingleObject(HANDLE handle, int timeout) 函数的函数。我知道有一个pthread_timedjoin()电话,但这仅在某些版本的 Linux 上可用(绝对不是在 Android 中)。

0 投票
1 回答
2158 浏览

c++ - pthread_join 因核心转储段错误而崩溃

我有以下代码会导致pthread_join调用时出现段错误。对于很多行我很抱歉,但每个字符都可能很重要。如果它很重要,相同的代码在 WinAPI 下运行良好且没有任何错误。

并且MyThreadProc

在许多代码的末尾,我的struct

工作选项是:

0 投票
2 回答
3512 浏览

c - pthread:加入一个分离的线程没有正确设置 errno

我正在检查“pthread_join”的行为并具有以下代码:

在我的平台上观察到的输出(Linux 3.2.0-32-generic #51-Ubuntu SMP x86_64 GNU/Linux):

  1. 注释掉“睡眠(1)”:42 0

  2. 使用 sleep 语句,它会产生:1 0

根据 pthread_join 的手册页,当我们尝试加入不可加入的线程时,我们应该得到错误“ EINVAL ”,但是,上述两种情况都没有设置 errno。而且在第一种情况下,似乎我们甚至可以获得分离线程的退出状态,我对结果感到困惑。谁能解释一下?谢谢

[编辑]:我意识到第一个 printf 可能会重置 'errno',但是,即使我交换了两个 'printf' 语句的顺序,我仍然得到相同的结果。

0 投票
0 回答
814 浏览

pthreads - 分离后在主线程中调用 pthread_exit 使其失效

我正在尝试创建一个新线程,将执行卸载到新线程并杀死主线程。这是示例程序。

但这会使线程(和进程?)处于失效状态。

然后我发现了这个 - http://www.mentby.com/kaz-kylheku/main-thread-pthreadexitsysexit-bug.html

问题的原因是什么?有没有办法在不让线程处于僵尸/失效状态的情况下实现相同的目标。

0 投票
1 回答
411 浏览

c - pthread_join 从数组中的函数接收结果

我正在使用 C 中的 pthreads 并且遇到了问题(再次)。我正在尝试将结果作为函数数组发送到我的主线程。

此代码查找每个工人(1 个工人/行)的最大值并保存该值的索引。到目前为止,一切都很好。我将在此功能下方解释我的问题。这段代码做我想要的。

我的问题是当我在 pthread_join 中收到结果时,只有 maxValueResult[0] 有效,从 maxValueResult[1] 和 maxValueResult[2] 我只能得到地址或其他东西。之前:“返回*maxValueResult;” 所有三个值都是正确的,看起来像这样:“结果:maxValue:95 cord[3,3]”

这是我调用 pthread_join 的地方:

这将打印:“结果:maxValue:95 线 [0,1629976061]”,其中 95 是正确的,但其他两个不正确。我能做些什么来解决这个问题?正如您可能从我的代码中看到的那样,我不是很有经验。

编辑:我忘了告诉警告,我得到了几个!不幸的是它们是瑞典语,但我还是把它们贴在这里:“$ gcc -o sumb matrixSumB.c matrixSumB.c: In funkcion "main": matrixSumB.c:120:1: warning: passing argument 2 of 'pthread_join' from不兼容的指针类型 /usr/include/pthread.h:144:5:注意:预期的 'void **' 但参数的类型为 'int * (*)[3]' matrixSumB.c:在函数“Worker”中:matrixSumB .c:172:1: 警告:return 从整数中生成指针而不进行强制转换。”

亲切的问候狮子座

0 投票
1 回答
443 浏览

c++ - 多线程和 pthread_join

我的程序从文本文件中读取迷宫,然后主程序创建 3 个不同的线程来钻研这个迷宫并搜索出口。当一个线程发现出口时,它会在主线程中发布它的解决方案路径。

在这个迷宫中,存在陷阱,当一个线程遇到时,它们会“死亡”,将该陷阱的位置保存到已发现的陷阱点的全局数组中,以便其他线程知道在哪里避免。在该线程死亡后,主程序将重新生成另一个线程来代替它并继续遍历迷宫。

一个线程可能会遇到也可能不会遇到陷阱,并且使用 pthread_join 只会等待特定的线程。如何让主线程同时等待每个线程?

0 投票
2 回答
3673 浏览

c - 使用 pthreads 逐行读取文件...意外退出

我有以下代码:

它从文件中读取行,但过了一会儿它意外退出,没有错误消息。我想我搞砸了什么。

如何使用 pthreads 逐行读取文件但尽可能保持代码不变(我的意思是不要弄乱整个程序)?

0 投票
1 回答
8881 浏览

c - pthread 将值返回到数组

我目前正在开发一个使用 pthreads 的项目。到目前为止,该项目启动用户指定数量的线程并在每个线程上执行一些工作,然后关闭。每个线程都存储在动态分配的内存数组中。我这样做使用:

threads = malloc(number_of_threads * sizeof(pthread_t));

然后我在 for 循环中创建每个线程:

接下来我需要做的是存储这些线程的返回值。我的理解是我需要传递 pthread_join 一个我想要存储返回值的指针的地址。这是我有点困惑的地方。我对这一点的指针很好,然后我的大脑有点崩溃了哈哈。这是我关于如何实现这一点的想法,但我不相信这是正确的:

然后为了得到返回值,我会做类似的事情:

对此的任何帮助将不胜感激!

0 投票
3 回答
5757 浏览

c++ - 如何在 c++ 中从 pthread 返回一个双精度值?

阅读此线程后:How to return a value from thread in C on how to return an integer value from a pthread 我测试了它是否可以用于双精度,但它没有。有没有办法像原始线程中描述的那样从 pthread 进程返回双精度、长整数或字符串,而不是返回整数 42?

如果是怎么办?

如果我有一个包含 10 个位置的静态数组和 10 个 pthreads 每次修改不同的位置,我会遇到麻烦吗?一个例子就像“线程 0 只修改数组 [0],线程 1 只修改数组 [1] 等等”。

0 投票
2 回答
1174 浏览

c - 从主函数外部调用 pthread_create

我想做这样的事情:

这个想法是产生一些线程并继续做更多的工作main......然后当完成更多的工作时,等待线程完成。

它编译得很好,但是data当它在内部被访问时结构被破坏了do_work_son。我认为这是因为线程正在退出,即使我正在调用 join in main。如果我将pthread_{create,join}调用都移到 start_thread,它可以正常工作,但是我的 main 函数被 while 循环阻塞。我这样做是不是疯了?