问题标签 [pthread-barriers]

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 回答
19133 浏览

c - 如何使用 pthreads 屏障?

嗨,很抱歉发布了大量代码,但我对 C 代码很陌生,基本上我正在为大学做作业,我必须实现一个“pthread_barrier”,现在我理解了障碍的概念(或在至少我认为我这样做)但我只是不确定我应该把它放在哪里。任务规定:

“使用 pthread_barrier_init 和 pthread_barrier_wait 确保所有生产者/消费者线程同时开始生产/消费。”

顺便说一句,这是作业的额外学分部分

0 投票
4 回答
769 浏览

c - 什么是干净/可靠地关闭使用 pthread 屏障进行同步的线程的好策略?

我有一个基于 pthread 的多线程程序,它有四个线程无限期地执行这个运行循环(伪代码):

这很有效,因为在第一阶段每个线程都会更新自己的状态变量,这没关系,因为在第一阶段没有其他线程正在读取任何其他线程的状态变量。然后在第二阶段,就读取彼此状态的线程而言,这是一个免费的,但这没关系,因为在第二阶段没有线程修改其本地状态变量,因此它们实际上是只读的。

我剩下的唯一问题是,当我的应用程序需要退出时,如何干净可靠地关闭这些线程?(通过“干净可靠”,我的意思是不引入潜在的死锁或竞争条件,理想情况下不必发送任何 UNIX 信号来强制线程退出 pthread_barrier_wait() 调用)

我的 main() 线程当然可以将每个线程的 keepRunning 设置为 false,但是它如何让 pthread_barrier_wait() 为每个线程返回?AFAICT 让 pthread_barrier_wait() 返回的唯一方法是将所有四个线程的执行位置同时放在 pthread_barrier_wait() 内,但是当某些线程可能已经退出时,这很难做到。

调用 pthread_barrier_destroy() 似乎是我想要做的,但是当任何线程都可能在屏障上等待时,这样做是未定义的行为。

这个问题有一个众所周知的解决方案吗?

0 投票
0 回答
87 浏览

c - 线程永久阻塞在屏障上

我正在处理一项涉及使用各种线程同步机制的任务,但唯一让我头疼的是 pthread_barrier_t。

这个想法是将屏障实现为几个线程的检查点,但它们会永久阻塞。

我在这里检查了一些答案,我的实现似乎是正确的,甚至编译并运行了这个简单的答案,没有任何问题。

cpu.c(包含主线程):

units.c(包含其他线程的函数):

一些注意事项:

  • 我引用的两个文件都有自己的头文件
  • 小心地删除了一些代码以使其更短
  • 反正函数体大多是空的,我在等屏障工作
  • 还删除了错误检查以保持代码简短(执行时没有错误)
  • 屏障计数反映了几个线程的删除
  • 屏障在 cpu.h 上

谢谢!

0 投票
0 回答
217 浏览

linux - pthread_barrier 在调试时工作,但在运行时不工作

pthread_barrier_t在我的代码上使用来自 C/C++ 的代码来同步 3 个不同的线程。当我通过 gdb 使用调试时,它工作得很好,但是当我直接从板上运行二进制文件时,所有 3 个线程都卡在pthread_barrier_wait. 屏障似乎无法看到所有 3 个线程都在那里。

我正在使用 Ubuntu 14.10、g++4.9、arm-linux-gnueabihf 将代码交叉编译到 ARM。该板是类似于 TI AM3352 和 Debian 8 的 BBB。

代码是线程1

线程 2

线程 3

我正在使用初始化屏障

有谁知道这里发生了什么?

PS:同一个库的其他函数运行良好,如 pthread_mutex,只是屏障没有。

0 投票
1 回答
202 浏览

c - 关于 PThread 和 PThread 障碍

我正在编写一个 SMT 程序,并且正在尝试解决一个有趣的问题。

我需要我的所有函数一起退出,但是有些线程卡在障碍物上,即使我不希望它们这样做。

我的问题是:当我删除障碍时会发生什么?线程是否卡在屏障释放处?有没有办法向某个障碍发出释放信号,即使障碍处的线程数尚未达到?

谢谢

0 投票
2 回答
153 浏览

ada - Ada:像 pthread_barrier_wait 这样的行为?

我正在尝试在 Ada 中实现一个与 C 的 pthread_barrier_wait 具有相似功能的屏障。Ada 2012 有 Ada.Synchronous_Barriers 但这在我的系统上不可用(debian lenny 上的 gnu-gnat)。

更具体地说,如何在不使用 Ada 2012 的情况下让所有等待的任务同时从屏障中释放出来,并且理想情况下,让其中一个任务做一些特别的事情?下面是一个非常次优的实现。什么可能是更好的方法?

程序输出:

0 投票
1 回答
3415 浏览

c - C中的Pthread-Barriers

我正在尝试创建 ac 代码,它将对具有多个线程的数组进行排序,因此我需要使用障碍来同步威胁

我的论点结构看起来像这样

这就是我初始化障碍的方式

我希望它对排序方法进行一次迭代,然后等待所有线程在障碍处完成然后继续,但所做的是

然后卡住。可能是什么问题?编辑:完整代码

0 投票
1 回答
667 浏览

c - Pthread 奇怪的行为和分段错误

我正在尝试编写一个使用线程的并行模拟器。但我找不到导致分段错误的原因以及为什么线程有时似乎卡在障碍上。

我尝试注释掉部分并使用 valgrind(和 helgrind 工具)对其进行跟踪,但仍然无法理解导致错误的原因。可以使用 ./simulator test.txt 0 0 1 测试代码,其中 test.txt 如下

我实施障碍的方式有什么问题?是什么导致了 SEGFAULT?编辑:使用较短版本的代码进行了更新。这段代码只想创建 num_thread 个线程,每个线程将一个元素从数组复制到另一个。

0 投票
1 回答
88 浏览

spring-integration - 我们是否总是需要 2 个线程才能使线程屏障工作?

想要检查线程屏障是否是解决问题的正确方法,您必须在特定时间间隔内连续轮询 DB 2-3 次以检查触发器的传入事件,然后最终在 Spring Integration 项目中超时。

另外,我们是否总是需要 2 个线程才能使线程屏障工作?挂起的线程和触发线程。

0 投票
1 回答
47 浏览

ios - 在 swift3 中实现屏障

我正在尝试将多个图像上传到 Firebase 存储,并且该应用程序需要在上传任务完成后执行某些操作。我做了一些研究,发现屏障在这种情况下很有用。我按照教程进行操作,但似乎我的代码无法正常工作。我错过了什么?这是代码:

此代码的问题是completion()在所有上传部分完成之前运行。我怎样才能解决这个问题?