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

linux - pthread_exit 返回值

这让我很惊讶。

输出是

我期望 exit_status 两次都是线程的实际退出值(在我的情况下为 50)。相反,它只是返回我用于 pthread_exit 的全局变量的值。这不是一个错误吗?

0 投票
1 回答
422 浏览

c - 使用 pthread_cond_t 表示执行结束

我正在使用 pthread_cond_t 向主线程发出子线程执行结束的信号。由于我没有同步对共享资源的访问,我想知道包含 pthread_cond_wait 的循环是什么?这是我所拥有的:

默认情况下,主线程会等到 thread1 或 thread2 向它发送信号,还是我们需要围绕等待的某种条件循环?

此外,如果没有显式调用 pthread_join,主线程如何访问发出信号的线程的退出状态?或者,有没有办法获取发出信号的线程的 thread_id,以便主线程可以加入它以检索其退出状态?

0 投票
1 回答
142 浏览

c++ - 如何改进多线程程序的分叉/连接?

显然,OP已经在评论中得到了答案,现在问题已经解决

我编写了一个使用 pthread 执行的素数程序(eratosthenes 筛)。

这是我的第一个多线程程序,我不知道为什么我的程序大约需要 3 分钟。执行的时间。时间太长了!

有人可以告诉我我到底错在哪里:

约束:只能分叉 8 个线程。

数量:10^8

如何提高此代码的效率(尤其是在分叉和加入线程时)?

0 投票
1 回答
524 浏览

c - pthread_join 不影响主线程

我找到了这个 Sockets 教程http://www.binarytides.com/socket-programming-c-linux-tutorial/,我在最后一个例子中遇到了麻烦。它是一个使用套接字和 pthread 的线程服务器。

代码编译得很好,但没有按预期工作。我怀疑pthread_join电话是罪魁祸首,但我不确定。

我已经尝试使用 GCC 4.8.3 和 4.8.2 在 Cygwin(32 位)和 Alpine Linux(32 位)上编译和运行服务器和客户端。两种环境中的问题都是相同的。

我已经阅读了http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_join.htmlpthread_join上的 pthreads文档,但我似乎在服务器代码中的调用中找不到任何问题。pthread_join

更新了服务器、客户端和输出。

服务器代码:

客户端代码:

服务器输出:

客户端输出:

看起来主线程在 sniffer_thread 之前返回/完成。

任何帮助都会得到帮助。

0 投票
2 回答
1752 浏览

pthreads - 如何将线程参数作为引用而不是按值传递?

我在创建和加入线程时遇到了麻烦。我也不确定如何通过引用传递线程参数的语法。代码应该在创建线程时打印以及它在线程例程中休眠多长时间。

0 投票
2 回答
1462 浏览

c - pthread_join 错误

我的程序需要创建一些线程,但我被困在 pthread_join,因为它总是进入错误情况,因为返回(安全)是 3,而不是 0,我认为这是正确的数字,以防万一一切顺利.

编辑:为了更好地解释我自己,错误是代码正在进入错误处理区域,而它不应该进入,这意味着我收到“错误等待:成功”消息。

0 投票
0 回答
446 浏览

c - pthread_join 的段错误(仅有时)

我想在我的应用程序中使用一堆 pthread。为了熟悉 pthread 库,我从一个小型演示应用程序开始(参见随附的源代码)。

如果我创建 200 个线程,一切正常。但是,如果我将线程数增加到 2000,应用程序会因段错误而崩溃。根据gdb,段错误发生在pthread_join。不幸的是,我无法弄清楚为什么会这样。

首先,我认为我的 linux 机器无法处理那么多线程,所以我增加了 中的值/proc/sys/kernel/threads-max,但这并没有改变任何东西。

我究竟做错了什么?

0 投票
1 回答
1151 浏览

c - pthread_join() 意外结果

由于我得到的结果,我无法理解 pthread_join() 函数。

如果 pthread_join() 应该暂停调用线程,直到给定线程 id 的线程完成它的工作,那么为什么以下代码不先执行线程 1工作,然后执行线程 2工作。它们都是同时发生的。

如果我取出两条 pthread_join() 行(从 main 中),程序将终止并且没有任何反应。这是否意味着主线程是两个连接函数的调用进程,而主线程正在等待其他两个新创建的线程完成?

输出:

在此处输入图像描述

sleep注释掉的输出:

在此处输入图像描述

有人可以解释为什么 pthread_join 没有按照文档让您相信的那样做吗?

0 投票
3 回答
13436 浏览

c - pthread_join() 用于异步线程

我编写了一个简单的演示程序,以便我可以理解该pthread_join()功能。

我知道如何使用该pthread_condition_wait()函数来允许异步线程,但我试图了解如何使用该pthread_join()函数进行类似的工作。

在下面的程序中,我将Thread 1s ID 传递给Thread 2s函数。在Thread 2s函数中,我调用该pthread_join()函数并传入Thread 1s ID。我希望这会导致线程 1先运行,然后线程 2再运行,但我得到的是它们都同时运行。

这是因为一次只有一个线程可以使用该函数,并且当我从主线程调用它时我pthread_join()已经在使用该函数了吗?pthread_join()

输出:

在此处输入图像描述

0 投票
1 回答
2536 浏览

c - 彼得森算法避免线程之间的竞争条件

细节:

我正在实施彼得森算法(如下)以避免竞争条件。我想做的方式是声明一个全局整数变量,并创建线程一和二。每当线程一可以访问全局变量时,它应该打印a并将一个添加到全局变量计数器。当线程二可以访问这个全局变量时,它应该打印b并向全局变量计数器加一。这应该一直持续到全局变量达到某个数字(比如说 10)。之后,我希望线程(最后一次添加到全局变量的两个线程中的哪一个)将全局变量重置为 1,并且两个线程都应该退出。到目前为止我实现的代码有点完成这项工作,它避免了竞争条件,但是当计数器达到限制时我无法退出两个线程。

问题:

  • 当计数器达到特定限制时,如何退出两个线程。

  • 什么是退出线程的正确形式,现在我正在使用 exit(),我认为这不是很有效。

彼得森算法

我的代码:

编辑:我意识到我必须将检查计数器限制值的 if 语句放在关键部分(在将标志更改为 false 之前)。