问题标签 [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 回答
619 浏览

c++ - pthread_join() 可能会产生什么信号?

我在 C++ 中遇到了一个错误情况,我无法在调用 pthread_join() 时轻松重现一些信号,我不知道是哪一个,但是我的信号处理程序被调用了,并且由于某种原因没有打印出正常的调试信息在产生的信号上。我确实得到了一个堆栈跟踪,显示:

我查看了 pthread_join() 的手册页,没有看到任何关于信号的提及。

产生的信号可能是什么,原因可能是什么?这可能是某种竞争条件。

0 投票
1 回答
1152 浏览

c - C pthread 加入一个结束的线程

我正在构建 2 个通过 FIFO 进行通信的程序(客户端/服务器)。两个程序都有线程。当客户端的线程结束时,它不会被加入,并且 main 挂起。

这些程序执行以下操作:

服务器:

  1. main:从 FIFO1 读取
  2. main:创建线程来处理请求。
  3. 主要:转到1
  4. 线程:处理请求
  5. 线程:向 FIFO2 发送响应
  6. 线程:退出

客户:

  1. main:生成线程
  2. 线程:从 FIFO2 读取 X 对客户端的响应
  3. 线程:退出
  4. main:向 FIFO1 发送 X 个请求
  5. main:等待线程退出
  6. 主要:检查响应

服务器运行良好,所有线程都相应地加入。

客户端在步骤 5 中失败。使用

永远挂主。我查过了,这个话题已经结束了。

使用

我明白了

错误代码=16

strerror 给出

设备或资源繁忙

创建线程:

或使用: pthread_create(&reader,NULL,trataResp,NULL);

不会产生任何变化。

我该如何解决这个问题?

0 投票
1 回答
873 浏览

c++ - pthread 输入线程和工作线程同步

我有两个 pthread,其中一个正在从 cin 读取并将其放入 QUEUE,另一个是工作线程,每 2 秒检查一次 QUEUE,如果其中有内容,则打印一些内容。

这是我的主要内容:

其中 Thread.h 和 Thread.cpp 是:

Mutex.h 和 Mutex.cpp:

问题是一旦它在无限循环中等待 iread 线程中的标准输入,rq 线程就永远不会启动。事实上,无论哪个 .start() 先出现,它都会被困在其中……有什么想法吗?

0 投票
2 回答
4628 浏览

multithreading - 我什么时候应该在多线程编程中使用“锁定”?

我什么时候应该在多线程编程中使用“锁定”?只是锁定每个线程将要修改的区域或锁定每个线程可以访问的区域,即使它不会被修改?

感谢您的关注,如果您有更多的时间,关于真实代码的更多细节:

0 投票
1 回答
240 浏览

multithreading - gdb 的详细信息是什么,它有一个线程吗?

gdb的细节是什么,它在调试代码时是否拥有一个线程?

我在主线程中设置了一个退出标志,并且在打印标志之前我已经加入了其他线程。当我在使用参数“-g”编译后使用 gdb 运行调试版本时,它看起来:

GDB 提供有关线程“创建”和“退出”的信息。pthread_join()但是在主线程中调用并打印“Main exit”后总是有一个线程退出。为什么?是 gdb 使用的线程吗?

运行发布版,没什么特别的:

0 投票
1 回答
146 浏览

c - 从 C 中的多个线程接收值

在这个程序中,我在第一次调用 pthread_join 后遇到了分段错误。传递第一个文件时,我在 main.js 中获得了正确的大小。但是在调用第二个文件期间,我遇到了分段错误。使用 gdb,我了解到“**size[1] 和 **size[2] 尽管 malloc 为 NULL。但是在 main 开始时,我在分配内存时没有收到错误消息。这应该意味着内存是最初分配的。请帮助我该怎么办。

0 投票
2 回答
371 浏览

c - 如何在 C 中使用 pthread_join 控制线程数?

我创建了一个 C 程序,它将从文本文件中读取 20000 个字符串,并将其发送到其他程序。我用了一段时间来循环这个文本文件并创建线程,将文本发送到另一个程序。但我只希望 4 个线程工作。所以我使用了一个计数器并不断递减它,以及一个 if 条件来检查计数器,当它被设置为 1 时,我为之前的线程调用了 pthread_join。我想先完成这 4 个线程,然后新的 4 个线程来获取新的文本文件字符串。但它没有按我的需要工作。它仅每第 4 个线程处理 4 次。并且不会从文本文件中提取所有记录。

程序:-

输入文本文件包含:1 2 3 4 5 6 7 8 9 10 11 12 13 14

输出来了:-

期望输出:-

请注意,我只想在系统中创建 4 个线程。不止于此。

0 投票
2 回答
559 浏览

c++ - Pthreads,与 pthread_join(pthread_t, void**) 混淆

我不明白为什么 doespthread_join需要作为返回值的第二个参数void**,而pthread_exit给定返回值的返回值参数为void*.

0 投票
4 回答
3069 浏览

c - pthread_exit 问题返回结构

我有一个结构

在我的线程函数中,我做

我试着通过做来接受

我收到的价值观每次都很奇怪。我对如何接收我最终在线程中创建的值感到困惑。我正在尝试学习 C 中的线程,似乎我已经掌握了它,但我无法返回值。有办法吗?感谢任何人的帮助。

0 投票
2 回答
992 浏览

perl - 连接线程的问题

我的 perl 脚本的一部分有问题,困扰了我好几天。总结一下,目的是分块读取一个大文件并对输入流进行一些操作(与我的问题无关)。当我第一次实现它时,我只是遍历了文件,然后在上面做了一些事情,就像这样:

不幸的是,该文件非常大,并且操作在某种程度上很复杂,有许多函数调用,因此这导致内存稳步增加 perl 无法再分配内存并且脚本失败了。所以我做了一些调查并尝试了一些方法来最小化内存开销(在循环外定义变量,设置为 undef 等等),这导致分配的内存大小增加得更慢,但最后仍然失败。(如果我想得对,perl 将内存还给操作系统是……这在实践中不会发生。)

所以我决定将函数调用及其所有定义嵌套在一个子线程中,等待它的完成,加入,然后用下一个块再次调用线程:

如果线程加入,这可能是一个解决方案!但实际上并没有。如果我用 $thr->detach(); 运行它 一切正常,除了我同时得到数百个线程,这不是一个好主意,在这种情况下,我需要连续运行它们。

所以我对这个加入问题进行了一些调查,并得到一些声音说 perl 5.16.1 可能存在问题,所以我更新到 5.16.2 但它仍然没有加入。在邮件列表中的任何地方,我不记得我读过有人设法让线程加入 CPAN 模块 Thread::Queue 但这对我也不起作用。

所以我放弃了线程并试图分叉这个东西。但是对于叉子,“叉子”的总数似乎是有限的?无论如何,直到第 13 次到第 20 次迭代都很好,然后放弃了它不能再分叉的消息。

我还尝试使用 CPAN 模块 Parallel::ForkManager 和 Proc::Fork 但这没有帮助。

所以现在我不知何故被卡住了,无法自拔。也许别人可以!任何建议都非常感谢!

  1. 我怎样才能让这个东西与线程或子进程一起工作?
  2. 或者至少我怎样才能强制 perl 释放内存,以便我可以在同一个过程中做到这一点?

关于我的系统的一些附加信息:操作系统:Windows 7 64bit / Ubuntu Server 12.10 Perl on Windows:Strawberry Perl 5.16.2 64bit

我在 Stackoverflow 上的第一篇文章。希望我做对了:-)