问题标签 [pthreads]

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 投票
8 回答
37087 浏览

c - 非阻塞 pthread_join

我正在编写多线程服务器的关闭代码。如果一切顺利,所有线程都应该自行退出,但是线程卡住的可能性很小。在这种情况下,使用非阻塞连接会很方便所以我可以做到。

有没有办法进行非阻塞 pthread_join?某种定时加入也会很好。

像这样的东西:

我可以想到更多非阻塞连接有用的情况。

似乎没有这样的功能,所以我已经编写了一个解决方法,但这并不像我想要的那么简单。

0 投票
6 回答
7358 浏览

c++ - 多线程调试器

在使用多线程(pthread)进行调试时,GDB 会出现严重问题。*nix 上是否还有其他适用于 C/C++ 的优秀多线程调试器?

0 投票
13 回答
18941 浏览

c - 使用 C/Pthreads:共享变量是否需要是 volatile 的?

以C编程语言和Pthreads作为线程库;线程之间共享的变量/结构是否需要声明为 volatile?假设它们可能受到锁的保护(也许是障碍)。

pthread POSIX 标准对此是否有任何发言权,这是依赖于编译器还是两者都不依赖?

编辑添加:感谢您的出色回答。但是如果你使用锁呢?例如,如果您使用障碍怎么办?或者使用诸如比较和交换之类的原语直接和原子地修改共享变量的代码......

0 投票
5 回答
19740 浏览

c++ - 作为 C++ 类的成员启动线程的最佳方式?

我想知道启动作为 C++ 类成员的 pthread的最佳方法?我自己的方法如下作为答案......

0 投票
5 回答
14793 浏览

c++ - GDB 回溯消息“0x0000000000000000 in ?? ()”是什么意思?

当它给出具有以下输出的回溯时,这意味着什么?

程序因标准信号 11、分段错误而崩溃。我的应用程序是一个在 FreeBSD 6.3 上运行的多线程 FastCGI C++ 程序,使用 pthread 作为线程库。

根据信息来源,它已使用 -g 编译,并且我的源代码的所有符号表都已加载。

很明显,我的实际代码都没有出现在跟踪中,而是错误似乎来自标准 pthread 库。特别是,什么是??()????

编辑:最终在我的主代码中将崩溃追踪到标准的无效内存访问。没有解释为什么堆栈跟踪已损坏,但这是另一天的问题:)

0 投票
3 回答
2261 浏览

c - 是什么让 pthread 失效了?

我正在使用当前创建后台线程 (PTHREAD_DETACHED) 然后调用 pthread_exit(0) 的多线程程序(使用 pthreads)。我的问题是该进程随后被列为“已失效”,奇怪的是似乎在 /proc 中并不“真正存在”(这破坏了我的调试策略)

我希望满足以下要求:

  • 程序应该循环运行函数 A 和函数 B 一次
  • 给定程序 /proc/$pid/exe 的 PID,/proc/$pid/maps 和 /proc/$pid/fd 必须是可访问的(当进程失效时,它们都是空链接或无效链接)
  • 必须可以像往常一样使用 CTRL+C 和 CTRL+Z 暂停/中断程序

编辑:我犹豫要更改程序的界面,以使 A 在“主”线程中,而 B 在衍生线程中(它们目前以另一种方式)。它会解决问题吗?

0 投票
2 回答
1773 浏览

c - pthread_detach 会为我管理我的内存吗?

假设我有以下代码:

分离的线程会释放 malloc 分配的内存,还是我现在必须做的事情?

0 投票
3 回答
1243 浏览

c# - pthread_cond_t 的 EventWaitHandle 行为

我最近看到了 EventWaitHandle 在 C# 中的强大行为,并决定在姊妹应用程序中移动一些功能来做同样的事情。唯一的问题是姊妹应用程序是用 C 编写的。

没什么大不了的,我正在使用 pthreads,它有一个 pthread_cond_t 数据类型,允许发送信号。我唯一的问题是,是否有可能在等待它之前“发出信号”?

现在我的测试说不。也就是说,如果 ThreadA 在 ThreadB 等待之前触发了一个信号,那么 ThreadB 将无限期地等待。是否有另一种我可以使用的 pthread 类型更接近 C# 中 EventWaitHandle 的功能?一个对象是有信号的,这意味着第一个等待它的线程将立即通过,并将其设置为无信号。

将 pthread_cond 包装到另一个数据结构中并不难实现这一点。但同样,这个功能是否已经在 pthread 库中可用?

0 投票
7 回答
13757 浏览

c++ - 你如何为 x64 编译静态 pthread-win32 库?

看起来已经做了一些工作来使pthread-win32与 x64 一起工作,但没有构建说明。我尝试使用 Visual Studio x64 交叉工具命令提示符进行简单构建,但是当我尝试从 x64 应用程序链接到 lib 时,它看不到任何函数导出。似乎它仍在将 lib 编译为 x86 或其他东西。

我什至尝试在适当的地方将 /MACHINE 添加到 makefile 中,但这没有帮助。有没有人让这个工作?

0 投票
20 回答
5057 浏览

multithreading - 您使用哪些并行编程 API?

考虑到当今多核和多处理硬件的巨大重要性,试图了解人们目前实际上是如何编写并行代码的。对我来说,主要的范式似乎是 pthreads(POSIX 线程),它在 Linux 上是原生的,在 Windows 上可用。HPC 人倾向于使用 OpenMP 或 MPI,但在 StackOverflow 上似乎没有很多。还是您依赖 Java 线程、Windows 线程 API 等而不是可移植标准?在您看来,进行并行编程的推荐方法是什么?

或者您是否在使用更奇特的东西,例如 Erlang、CUDA、RapidMind、CodePlay、Oz,甚至亲爱的老 Occam?

澄清:我正在寻找非常便携且适用于各种主机架构上的平台(例如 Linux、各种 unix)的解决方案。Windows 是一种极少的支持很好的案例。所以 C# 和 .net 在这里真的太狭窄了,CLR 是一项很酷的技术,但他们能否为 Linux 主机发布它,以便它像 JVM、Python、Erlang 或任何其他可移植语言一样普遍。

C++ 或基于 JVM:可能是 C++,因为 JVM 倾向于隐藏性能。

MPI:我同意即使是 HPC 人员也认为它是一个难以使用的工具——但对于在 128000 个处理器上运行,它是解决 map/reduce 不适用的问题的唯一可扩展解决方案。不过,消息传递非常优雅,因为它是唯一一种似乎可以很好地扩展到本地内存/AMP、共享内存/SMP、分布式运行时环境的编程风格。

一个有趣的新竞争者是MCAPI。但我认为还没有人有时间对此进行任何实践经验。

所以总的来说,情况似乎是有很多我不知道的有趣的微软项目,而 Windows API 或 pthreads 是实践中最常见的实现。