问题标签 [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 投票
3 回答
167 浏览

c - 由于参数,多线程程序进入分段错误

我有一个多线程程序的奇怪问题,我将只报告部分代码。当我尝试运行它时,我收到一个分段错误错误。使用 gdb 和 valingrind 我能够发现问题出在我尝试取消引用时info,例如在for(i=0; i<info->subm_n; i++). 最奇怪的是,如果我在info=(c_args*)a之后进行strncpy()强制转换,只有在收集器的线程退出时才会出现分段错误。我使用的是 64 位操作系统,并且我读到这有时会在投射到void*in时出现问题pthread_create(),我什至不知道是不是这样。有人有什么想法吗? PS 带有大写字母的系统调用只是对女巫中功能的重新定义,我也测试失败

0 投票
2 回答
486 浏览

pthreads - pthread 等待其他线程完成

仅在先前的线程完成时如何创建线程?

0 投票
4 回答
143 浏览

java - 线程怎么知道前面有join方法

下面是我的示例代码,当我a.start()调用它时,它应该创建一个线程并立即打印“运行”。但是为什么在打印“开始”20次之后调用呢。

线程“a”如何决定不必run()立即调用。

输出:

我对线程的行为有点困惑。

我认为"run"应该在之前打印,"begin"因为它join()是在调用方法之前打印的,并且在调用线程“a”的连接方法时必须已经完成了它的执行,此时调用连接必须是无用的。

0 投票
1 回答
183 浏览

c++ - 使用 PIN 的模拟器上的 Pthread 安全编程

我正在使用一个硬件模拟器,它使用 PIN 工具来执行工作负载。作为工作量,我使用以下代码。尽管它可以在带有-lpthread标志的 Ubuntu 上运行,但在加入线程时它会在模拟器上冻结。

我认为本机操作系统可以容忍但模拟器不能容忍此代码中有一些不安全的东西。对此进行编码的最合适方法是什么?

主.h:

主.cc:

execute_parallel()包含 2 个用于创建和连接 pthread 的 for 循环。manual_schedule()具有相同代码的展开版本。在 PIN 上执行时,两者都运行良好,直到第一个线程的连接函数。当加入来时,它会冻结并永远保持这种状态,没有任何信号或错误。在带有-lpthread标志的 Ubuntu 上执行时,它可以完美运行并生成结果。

在这种情况下实现 pthread 的最安全和最合适的方法是什么?

提前致谢

编辑

我注意到程序在阅读之前冻结payload_texts[args->index1]。添加互斥锁有助于在这一点上继续进行。它也正常工作了一次。现在它是不确定的,在同一个二进制文件的多次执行中,它很少能正确完成。我认为应该是 jaccard_visit 函数内部出现死锁的原因。我将其更改如下:

0 投票
0 回答
340 浏览

c - 分段错误 pthread_join 因为 pthread_t id 更改为 0

我正在用 pthread 编写一个 C 程序。在我启动我的线程并执行它们之后,由于我无法解释的原因,某些东西在后台将我的两个 pthread 之一的值更改为 0 。在我的机器上,这个问题已经发生在

这是C代码:

我的功能锁定和解锁如下所示:

为什么我的 pthread ID 突然变了?

0 投票
2 回答
1762 浏览

multithreading - 为什么不能在同一个线程上执行多个 pthread_joins?

来自https://computing.llnl.gov/tutorials/pthreads/

一个加入线程可以匹配一个 pthread_join() 调用。在同一个线程上尝试多个连接是一个逻辑错误。

同样来自“man pthread_join”:

如果多个线程同时尝试加入同一个线程,结果是不确定的。

但是,从程序员的角度来看,多个线程可能希望等待单个线程完成(类似于屏障)是完全合理的。

例如,我们可能有 thread1、thread2 独立运行,我们可能希望两个线程都等到 thread3 完成。

这种限制背后有什么技术原因吗?

0 投票
1 回答
1264 浏览

pthreads - pthread_join 和 pthread_mutex_lock 有什么区别?

以下代码取自该站点,它显示了如何使用互斥锁。它同时实现了 pthread_join 和 pthread_mutex_lock:

我按原样运行了上面给出的代码,它产生了以下结果:

计数器值:1

计数器值:2

但在第二次运行中,我删除了“pthread_mutex_lock(&mutex1);” 和“pthread_mutex_unlock(&mutex1);” . 我编译并运行了代码,它再次产生了相同的结果。

现在让我感到困惑的是为什么在上面的代码中使用互斥锁,而没有它可以完成同样的事情(使用 pthread_join)?如果 pthread_join 阻止另一个线程运行,直到第一个线程完成,那么我认为它已经阻止了另一个线程访问计数器值。pthread_mutex_lock 的目的是什么?

0 投票
1 回答
351 浏览

c - 当 pthread_join 被注释时会发生什么?

这是来自Remzi第 27 章的代码。四处玩耍,我很想知道为什么有时在运行时,我会打印两次 A。我知道为什么会这样,因为我没有包含 join 语句。为什么跳过加入会导致这种情况?

我的输出:

0 投票
1 回答
1024 浏览

c++ - 如何在没有取消点的情况下取消 pthread

我为我的应用程序使用 3rd-party-library (dcerpc) 作为 rpc 服务器。假设第 3 方函数位于命名空间 third。

我在一个线程中调用了third::listen,以便监听传入的请求。

“第三”提供了中断此侦听并正确退出线程的所有机制,但要么不起作用,要么我没有以正确的方式进行操作。我首先尝试使用库工具(演示示例、邮件列表、浏览源代码以了解...),但没有成功。

所以我尝试了另一种选择:暴力杀死监听线程。但是我猜第三个::listen 没有取消点。

所以这段代码(我用上面的listen函数模拟了第三个::listen):

将输出:

和 pthread_join(thread, 0) 块(逻辑因为没有取消点)。

我的问题:如何杀死这个线程!

我尝试使用信号,但它停止了我的整个过程,而不仅仅是线程。

我的最后一次尝试是在一个专门的 fork 进程中隔离监听,但在我的项目环境中,fork 真的很痛苦(这是另一个故事)。

非常感谢您的帮助。

尼古拉斯。

0 投票
1 回答
476 浏览

c - 对 pthread_create() 中的参数感到困惑

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