问题标签 [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 投票
0 回答
822 浏览

c++ - 使用 pthread_cancel 时 pthread_join 的可能返回值是多少

下面的代码显示了我尝试在start_routine没有完成的时间内取消线程ts,并加入线程以确保线程终止。我在一个简单的函数 forstart_routineres2return上使用了它PTHREAD_CANCELED。但是,我尝试使用这种方法来调用第三方库start_routine,但这并没有返回PTHREAD_CANCELED(即我得到“pthread is terminate due to xxx?”)。

根据手册页pthread_join

如果目标线程被取消,则 PTHREAD_CANCELED 被放置在 *retval 中。

pthread_join使用时可能的返回值是pthread_cancel多少?为什么pthread_join有时不返回PTHREAD_CANCELED

请注意,我使用了默认取消类型(即PTHREAD_CANCEL_DEFERRED)并启用取消(即PTHREAD_CANCEL_ENABLE)。

0 投票
1 回答
256 浏览

c++ - PThread - 尽管调用了 pthread_join,但线程提前退出

我以相当基本的方式实现了 PThreads:

并且它的输出没有显示 X 的预期数量。我在调用 join 函数时是否做错了什么?感谢帮助。

输出

PS:我尝试了从 5 到 20 的各种 X 值,但它总是给我小于所需的 X 数。

0 投票
2 回答
5629 浏览

c++ - 如果线程在调用 pthread_join 之前退出怎么办

我有一个小代码

我在创建后的某个时间加入线程。如果 main 试图加入一个已经退出的线程会发生什么?

0 投票
2 回答
526 浏览

c++ - 为什么 pthread_exit 的行为类似于 pthread_join?

代码:

为什么pthread_exit(NULL)这里的行为像pthread_join()?即为什么退出main不破坏printHello线程并允许它继续?

0 投票
1 回答
1636 浏览

c++ - 加入 pthread 时出现分段错误

我正在尝试实现一个线程接口类

我遇到了 join() 函数的问题,它给了我一个分段错误

输出:

有趣的是,当我调用 gdb 并在 MyThread::run 设置中断时,会打印素数并且我收到一条消息:

请参考代码并帮助我,我是线程新手。顺便说一句,我已经删除了一些代码,只保留了必要的代码


更新:

使用pthread_create(&id, NULL, function, NULL);, 不会出现段错误,并且一切正常。

0 投票
1 回答
90 浏览

multithreading - 为什么这个关于共享变量的简单程序不能扩展?(无锁)

我是并发编程的新手。我实施了一项 CPU 密集型工作,并测量了我可以获得多少加速。但是,当我增加#threads 时,我无法获得任何加速。

该程序执行以下任务:

  • 有一个共享计数器可以从 1 计数到 1000001。
  • 每个线程执行以下操作,直到计数器达到 1000001:
    • 以原子方式递增计数器,然后
    • 循环运行 10000 次。

总共要执行 1000001*10000 = 10^10 次操作,所以我应该能够在增加#threads 时获得良好的加速。

这是我实现它的方式:

但是,当我运行我的程序时,我无法获得比顺序执行更好的性能!!

我在 4 核机器上运行程序。

有没有人有改进程序的建议?或者任何线索为什么我不能得到加速?

0 投票
3 回答
59 浏览

c - 确保每个线程的执行

我想运行 4 个不同的线程调用相同的方法,并且我想确保每次运行都来自不同的运行线程。

使用下面提供的代码,方法函数运行了预期的次数,但它总是由同一个线程完成(打印的值不会改变)。

我应该在代码中更改什么以确保这种情况?(这将导致此示例打印 4 个不同的值)

编辑:相同的代码,但包括一个结构来查看解决方案将如何

0 投票
1 回答
117 浏览

linux - 线程:pthread_cond_signal() 在等待条件下没有将控制权交给另一个线程

在这里,我尝试使用 read_input 读取输入,然后使用 write_input 打印该值...

但它在 read_input 循环中继续,而不是控制 write_input... 这应该将互斥控制返回到 write_input 线程以打印值。请帮忙...

0 投票
1 回答
67 浏览

pthreads - pthred_exit 返回变量静态与全局范围

当用于使用 pthread_join 获取返回值的变量被定义为全局与静态范围时,我看到了不同的行为。我在这里包含了 code_snippet。

静态变量

返回值

全局变量

返回值

有人可以解释为什么它的行为不同吗?

0 投票
1 回答
182 浏览

linux - pthread_exit 的退出值错误

下面的代码只是创建了两个线程并尝试获取它们的返回值。

我已经在 32 位 glibc-2.15 系统上编译并运行它,一切正常(输出:r1: 1, r2: 2)。但是,当我在 64 位 glibc-2.17 系统上执行相同操作时,输出错误(输出:r1: 0, r2: 2)。为什么相同的代码在不同的系统上表现不同?

注意:如果 r1 和 r2 的类型更改为void*int*如下所述,则代码在两个系统上都有效。