问题标签 [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.
linux - pthread_exit 返回值
这让我很惊讶。
输出是
我期望 exit_status 两次都是线程的实际退出值(在我的情况下为 50)。相反,它只是返回我用于 pthread_exit 的全局变量的值。这不是一个错误吗?
c - 使用 pthread_cond_t 表示执行结束
我正在使用 pthread_cond_t 向主线程发出子线程执行结束的信号。由于我没有同步对共享资源的访问,我想知道包含 pthread_cond_wait 的循环是什么?这是我所拥有的:
默认情况下,主线程会等到 thread1 或 thread2 向它发送信号,还是我们需要围绕等待的某种条件循环?
此外,如果没有显式调用 pthread_join,主线程如何访问发出信号的线程的退出状态?或者,有没有办法获取发出信号的线程的 thread_id,以便主线程可以加入它以检索其退出状态?
c++ - 如何改进多线程程序的分叉/连接?
显然,OP已经在评论中得到了答案,现在问题已经解决。
我编写了一个使用 pthread 执行的素数程序(eratosthenes 筛)。
这是我的第一个多线程程序,我不知道为什么我的程序大约需要 3 分钟。执行的时间。时间太长了!
有人可以告诉我我到底错在哪里:
约束:只能分叉 8 个线程。
数量:10^8
如何提高此代码的效率(尤其是在分叉和加入线程时)?
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 之前返回/完成。
任何帮助都会得到帮助。
pthreads - 如何将线程参数作为引用而不是按值传递?
我在创建和加入线程时遇到了麻烦。我也不确定如何通过引用传递线程参数的语法。代码应该在创建线程时打印以及它在线程例程中休眠多长时间。
c - pthread_join 错误
我的程序需要创建一些线程,但我被困在 pthread_join,因为它总是进入错误情况,因为返回(安全)是 3,而不是 0,我认为这是正确的数字,以防万一一切顺利.
编辑:为了更好地解释我自己,错误是代码正在进入错误处理区域,而它不应该进入,这意味着我收到“错误等待:成功”消息。
c - pthread_join 的段错误(仅有时)
我想在我的应用程序中使用一堆 pthread。为了熟悉 pthread 库,我从一个小型演示应用程序开始(参见随附的源代码)。
如果我创建 200 个线程,一切正常。但是,如果我将线程数增加到 2000,应用程序会因段错误而崩溃。根据gdb,段错误发生在pthread_join。不幸的是,我无法弄清楚为什么会这样。
首先,我认为我的 linux 机器无法处理那么多线程,所以我增加了 中的值/proc/sys/kernel/threads-max
,但这并没有改变任何东西。
我究竟做错了什么?
c - pthread_join() 意外结果
由于我得到的结果,我无法理解 pthread_join() 函数。
如果 pthread_join() 应该暂停调用线程,直到给定线程 id 的线程完成它的工作,那么为什么以下代码不先执行线程 1工作,然后执行线程 2工作。它们都是同时发生的。
如果我取出两条 pthread_join() 行(从 main 中),程序将终止并且没有任何反应。这是否意味着主线程是两个连接函数的调用进程,而主线程正在等待其他两个新创建的线程完成?
输出:
sleep
注释掉的输出:
有人可以解释为什么 pthread_join 没有按照文档让您相信的那样做吗?
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()
输出:
c - 彼得森算法避免线程之间的竞争条件
细节:
我正在实施彼得森算法(如下)以避免竞争条件。我想做的方式是声明一个全局整数变量,并创建线程一和二。每当线程一可以访问全局变量时,它应该打印a
并将一个添加到全局变量计数器。当线程二可以访问这个全局变量时,它应该打印b
并向全局变量计数器加一。这应该一直持续到全局变量达到某个数字(比如说 10)。之后,我希望线程(最后一次添加到全局变量的两个线程中的哪一个)将全局变量重置为 1,并且两个线程都应该退出。到目前为止我实现的代码有点完成这项工作,它避免了竞争条件,但是当计数器达到限制时我无法退出两个线程。
问题:
当计数器达到特定限制时,如何退出两个线程。
什么是退出线程的正确形式,现在我正在使用 exit(),我认为这不是很有效。
彼得森算法
我的代码:
编辑:我意识到我必须将检查计数器限制值的 if 语句放在关键部分(在将标志更改为 false 之前)。