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

c++ - 如何使用 C++ 线程并行实现生命游戏?

我已经实现了生命游戏的顺序版本,但现在我想并行化它。我尝试使用从此处的一个答案中获得的建议,但现在尝试编译时出现错误。错误说“无效使用非静态成员函数 CalcRow”,然后它给出的行是:threads.push_back(thread(CalcRow, board, row)); 不知道如何修复它。我尝试将其声明为静态,但这不起作用,它仍然给出相同的错误。

这是我对并行实现的尝试:

GameOfLife.h:

主.cc:

0 投票
1 回答
372 浏览

c - 循环线程中的 pthread_barrier_t

我使用 3 个不同的线程(t0、t1 和 t2),我需要以这种方式同步行为:

C

我的主线程将创建这 3 个线程,就像我提到的那样,它们将循环通过打印和屏障。

我尝试编写传递给它们的函数(f0 表示 t0,f1 表示 t1 等):

在遇到第一个障碍之前它运行良好,但看起来障碍没有重置,一旦所有线程遇到它,我就尝试重新初始化,但效果很奇怪。

0 投票
0 回答
30 浏览

c - 使用多线程同时复制单个文件,将同一个文件向下输出到MD5校验和

我遇到的问题是,当文件尝试复制时,它只复制文件的一部分,而另一部分是一堆不可读的字符。这是针对希望我们使用屏障同步的学术作业,因此我们需要使用打开、写入和读取。

我已经多次修改了线程函数,但如果是问题,我可以再次更改它,我根本没有更改 main 中的 for 循环,所以即使这可能是问题,但我不知道它可能是什么。最后,我真的不知道如何处理障碍;我的教授很含糊,我真的不能问他问题,也许障碍是我真正缺少的部分。

0 投票
1 回答
2925 浏览

c - 未知类型名称“pthread_barrier_t”

我正在尝试在 C 中并行化算法。我想使用pthread_barrier_t但我的 Ubuntu wsl 由于某种原因找不到它。我已经pthread.h包含了,我可以使用其余的 pthread 函数。libthread.a已安装。

确切的错误是:“标识符 pthread_barrier_t 未定义”

我在其他地方看到它可能是我正在编译的方式。

编译如下:

此外,VS Code 无法识别该功能。

0 投票
0 回答
47 浏览

multithreading - 操作问题 qustions - 以上代码的线程、进程等:

问题:在 ex1.c (6.1) 中,以下哪些属性实现了:

(一)互斥而不进步

(二)进步而不是相互排斥

(3) 既不互斥也不进步

(四)互斥与进步并重

请解释?

1.2

哪些论点(在 6.1 中)是正确的,哪些不正确:

(1) 总是退出。当线程 = 2 或线程 <= 0

(2) 总是挂起。线程 = 1 或线程 > 2

任何帮助将不胜感激

0 投票
0 回答
55 浏览

multithreading - 简单的 openMP 屏障有潜在的死锁

我在 OpenMP 中实现了一个简单的传播障碍,它存在潜在的死锁,我无法弄清楚原因。

线程共享一个共同的数据结构标志,看起来像这样:

传播功能的代码看起来像这样

0 投票
0 回答
30 浏览

linux - 如果所有线程都访问同一个函数,我们是否需要使用信号量?

我有一个障碍问题任务,其中 N 个线程必须递增一个数字 X。当所有都完成递增时,最后一个线程将打印一条消息。我知道需要使用信号量将它们同步到最后一个线程,但为什么我们需要将它们相互同步?它们都执行相同的功能,顺序无关紧要。

这是问题中让我感到困惑的部分:

利用信号量来同步对 x 的访问。还使用信号量来防止特殊线程在 n 个线程完成之前打印所需的语句。x 的值将按顺序打印。不要在主函数中使用信号量;在创建的线程中使用它们。

这是我写的代码:

0 投票
2 回答
127 浏览

c - 在 C 上使用 pthread 实现屏障

我正在尝试并行化合并排序算法。我正在做的是为每个线程划分输入数组,然后合并线程结果。我试图合并结果的方式是这样的:

所以,在我的函数结束时,sortManager我调用了mergeThreadResults应该实现上述逻辑的函数。在其中我迭代对以合并相应的线程。然后,如果需要,我将最后一个项目合并到线程 0。它看起来像这样:

它似乎按预期工作。问题是,我正在使用一个sleep函数来同步线程,这远不是最好的方法。所以我试图用pthread实现一个障碍。
在其中,我尝试计算该循环需要多少次迭代并将其传递为breakpoint. 当所有线程都在同一点时,我释放合并功能并在新的循环中再次等待。这是我尝试过的:

但它没有按预期工作。在最后一个周期完全结束之前的一些merge触发器,给我留下了一个部分排序的数组。

这是我的测试代码的一个小例子:

0 投票
1 回答
38 浏览

c - 为什么我的程序找不到 pthread_barrier_init.c 文件?

对于学校,我正在开发一个项目,该项目有 2 个正在运行的读取线程和 1 个围绕共享缓冲区工作的写入线程。这个共享缓冲区是我们自己编程的某种基于指针的列表。为了使其线程安全,我使用了 pthread_rw_locks 和一些 pthread_barriers。当我尝试运行我的代码时,它几乎立即崩溃,并且给了我一个分段错误。使用 gdb 调试器时,它给了我以下消息:

程序收到信号 SIGSEGV,分段错误。

__pthread_barrier_init (barrier=0x0, attr=0x0, count=2) 在 pthread_barrier_init.c:47

47 pthread_barrier_init.c:没有这样的文件或目录。

编译时,我包含了 -lpthread 标志,并且我还确保在使用它的每个文件中都包含 pthread.h。知道为什么我的程序找不到这个 c 文件吗?

编辑

这是我使用的代码片段。(这几乎是所有代码,但在这部分出错了)

这是我的主循环代码

这是我的缓冲区代码