问题标签 [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.
c++ - pthread_join() 可能会产生什么信号?
我在 C++ 中遇到了一个错误情况,我无法在调用 pthread_join() 时轻松重现一些信号,我不知道是哪一个,但是我的信号处理程序被调用了,并且由于某种原因没有打印出正常的调试信息在产生的信号上。我确实得到了一个堆栈跟踪,显示:
我查看了 pthread_join() 的手册页,没有看到任何关于信号的提及。
产生的信号可能是什么,原因可能是什么?这可能是某种竞争条件。
c - C pthread 加入一个结束的线程
我正在构建 2 个通过 FIFO 进行通信的程序(客户端/服务器)。两个程序都有线程。当客户端的线程结束时,它不会被加入,并且 main 挂起。
这些程序执行以下操作:
服务器:
- main:从 FIFO1 读取
- main:创建线程来处理请求。
- 主要:转到1
- 线程:处理请求
- 线程:向 FIFO2 发送响应
- 线程:退出
客户:
- main:生成线程
- 线程:从 FIFO2 读取 X 对客户端的响应
- 线程:退出
- main:向 FIFO1 发送 X 个请求
- main:等待线程退出
- 主要:检查响应
服务器运行良好,所有线程都相应地加入。
客户端在步骤 5 中失败。使用
永远挂主。我查过了,这个话题已经结束了。
使用
我明白了
错误代码=16
strerror 给出
设备或资源繁忙
创建线程:
或使用: pthread_create(&reader,NULL,trataResp,NULL);
不会产生任何变化。
我该如何解决这个问题?
c++ - pthread 输入线程和工作线程同步
我有两个 pthread,其中一个正在从 cin 读取并将其放入 QUEUE,另一个是工作线程,每 2 秒检查一次 QUEUE,如果其中有内容,则打印一些内容。
这是我的主要内容:
其中 Thread.h 和 Thread.cpp 是:
Mutex.h 和 Mutex.cpp:
问题是一旦它在无限循环中等待 iread 线程中的标准输入,rq 线程就永远不会启动。事实上,无论哪个 .start() 先出现,它都会被困在其中……有什么想法吗?
multithreading - 我什么时候应该在多线程编程中使用“锁定”?
我什么时候应该在多线程编程中使用“锁定”?只是锁定每个线程将要修改的区域或锁定每个线程可以访问的区域,即使它不会被修改?
感谢您的关注,如果您有更多的时间,关于真实代码的更多细节:
multithreading - gdb 的详细信息是什么,它有一个线程吗?
gdb的细节是什么,它在调试代码时是否拥有一个线程?
我在主线程中设置了一个退出标志,并且在打印标志之前我已经加入了其他线程。当我在使用参数“-g”编译后使用 gdb 运行调试版本时,它看起来:
GDB 提供有关线程“创建”和“退出”的信息。pthread_join()
但是在主线程中调用并打印“Main exit”后总是有一个线程退出。为什么?是 gdb 使用的线程吗?
运行发布版,没什么特别的:
c - 从 C 中的多个线程接收值
在这个程序中,我在第一次调用 pthread_join 后遇到了分段错误。传递第一个文件时,我在 main.js 中获得了正确的大小。但是在调用第二个文件期间,我遇到了分段错误。使用 gdb,我了解到“**size[1] 和 **size[2] 尽管 malloc 为 NULL。但是在 main 开始时,我在分配内存时没有收到错误消息。这应该意味着内存是最初分配的。请帮助我该怎么办。
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 个线程。不止于此。
c++ - Pthreads,与 pthread_join(pthread_t, void**) 混淆
我不明白为什么 doespthread_join
需要作为返回值的第二个参数void**
,而pthread_exit
给定返回值的返回值参数为void*
.
c - pthread_exit 问题返回结构
我有一个结构
在我的线程函数中,我做
我试着通过做来接受
我收到的价值观每次都很奇怪。我对如何接收我最终在线程中创建的值感到困惑。我正在尝试学习 C 中的线程,似乎我已经掌握了它,但我无法返回值。有办法吗?感谢任何人的帮助。
perl - 连接线程的问题
我的 perl 脚本的一部分有问题,困扰了我好几天。总结一下,目的是分块读取一个大文件并对输入流进行一些操作(与我的问题无关)。当我第一次实现它时,我只是遍历了文件,然后在上面做了一些事情,就像这样:
不幸的是,该文件非常大,并且操作在某种程度上很复杂,有许多函数调用,因此这导致内存稳步增加 perl 无法再分配内存并且脚本失败了。所以我做了一些调查并尝试了一些方法来最小化内存开销(在循环外定义变量,设置为 undef 等等),这导致分配的内存大小增加得更慢,但最后仍然失败。(如果我想得对,perl 将内存还给操作系统是……这在实践中不会发生。)
所以我决定将函数调用及其所有定义嵌套在一个子线程中,等待它的完成,加入,然后用下一个块再次调用线程:
如果线程加入,这可能是一个解决方案!但实际上并没有。如果我用 $thr->detach(); 运行它 一切正常,除了我同时得到数百个线程,这不是一个好主意,在这种情况下,我需要连续运行它们。
所以我对这个加入问题进行了一些调查,并得到一些声音说 perl 5.16.1 可能存在问题,所以我更新到 5.16.2 但它仍然没有加入。在邮件列表中的任何地方,我不记得我读过有人设法让线程加入 CPAN 模块 Thread::Queue 但这对我也不起作用。
所以我放弃了线程并试图分叉这个东西。但是对于叉子,“叉子”的总数似乎是有限的?无论如何,直到第 13 次到第 20 次迭代都很好,然后放弃了它不能再分叉的消息。
我还尝试使用 CPAN 模块 Parallel::ForkManager 和 Proc::Fork 但这没有帮助。
所以现在我不知何故被卡住了,无法自拔。也许别人可以!任何建议都非常感谢!
- 我怎样才能让这个东西与线程或子进程一起工作?
- 或者至少我怎样才能强制 perl 释放内存,以便我可以在同一个过程中做到这一点?
关于我的系统的一些附加信息:操作系统:Windows 7 64bit / Ubuntu Server 12.10 Perl on Windows:Strawberry Perl 5.16.2 64bit
我在 Stackoverflow 上的第一篇文章。希望我做对了:-)