问题标签 [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.
c++ - 如何使用 C++ 线程并行实现生命游戏?
我已经实现了生命游戏的顺序版本,但现在我想并行化它。我尝试使用从此处的一个答案中获得的建议,但现在尝试编译时出现错误。错误说“无效使用非静态成员函数 CalcRow”,然后它给出的行是:threads.push_back(thread(CalcRow, board, row)); 不知道如何修复它。我尝试将其声明为静态,但这不起作用,它仍然给出相同的错误。
这是我对并行实现的尝试:
GameOfLife.h:
主.cc:
c - 使用多线程同时复制单个文件,将同一个文件向下输出到MD5校验和
我遇到的问题是,当文件尝试复制时,它只复制文件的一部分,而另一部分是一堆不可读的字符。这是针对希望我们使用屏障同步的学术作业,因此我们需要使用打开、写入和读取。
我已经多次修改了线程函数,但如果是问题,我可以再次更改它,我根本没有更改 main 中的 for 循环,所以即使这可能是问题,但我不知道它可能是什么。最后,我真的不知道如何处理障碍;我的教授很含糊,我真的不能问他问题,也许障碍是我真正缺少的部分。
c - 未知类型名称“pthread_barrier_t”
我正在尝试在 C 中并行化算法。我想使用pthread_barrier_t
但我的 Ubuntu wsl 由于某种原因找不到它。我已经pthread.h
包含了,我可以使用其余的 pthread 函数。libthread.a
已安装。
确切的错误是:“标识符 pthread_barrier_t 未定义”
我在其他地方看到它可能是我正在编译的方式。
编译如下:
此外,VS Code 无法识别该功能。
multithreading - 操作问题 qustions - 以上代码的线程、进程等:
问题:在 ex1.c (6.1) 中,以下哪些属性实现了:
(一)互斥而不进步
(二)进步而不是相互排斥
(3) 既不互斥也不进步
(四)互斥与进步并重
请解释?
1.2
哪些论点(在 6.1 中)是正确的,哪些不正确:
(1) 总是退出。当线程 = 2 或线程 <= 0
(2) 总是挂起。线程 = 1 或线程 > 2
任何帮助将不胜感激
multithreading - 简单的 openMP 屏障有潜在的死锁
我在 OpenMP 中实现了一个简单的传播障碍,它存在潜在的死锁,我无法弄清楚原因。
线程共享一个共同的数据结构标志,看起来像这样:
传播功能的代码看起来像这样
linux - 如果所有线程都访问同一个函数,我们是否需要使用信号量?
我有一个障碍问题任务,其中 N 个线程必须递增一个数字 X。当所有都完成递增时,最后一个线程将打印一条消息。我知道需要使用信号量将它们同步到最后一个线程,但为什么我们需要将它们相互同步?它们都执行相同的功能,顺序无关紧要。
这是问题中让我感到困惑的部分:
利用信号量来同步对 x 的访问。还使用信号量来防止特殊线程在 n 个线程完成之前打印所需的语句。x 的值将按顺序打印。不要在主函数中使用信号量;在创建的线程中使用它们。
这是我写的代码:
c - 在 C 上使用 pthread 实现屏障
我正在尝试并行化合并排序算法。我正在做的是为每个线程划分输入数组,然后合并线程结果。我试图合并结果的方式是这样的:
所以,在我的函数结束时,sortManager
我调用了mergeThreadResults
应该实现上述逻辑的函数。在其中我迭代对以合并相应的线程。然后,如果需要,我将最后一个项目合并到线程 0。它看起来像这样:
它似乎按预期工作。问题是,我正在使用一个sleep
函数来同步线程,这远不是最好的方法。所以我试图用pthread实现一个障碍。
在其中,我尝试计算该循环需要多少次迭代并将其传递为breakpoint
. 当所有线程都在同一点时,我释放合并功能并在新的循环中再次等待。这是我尝试过的:
但它没有按预期工作。在最后一个周期完全结束之前的一些merge
触发器,给我留下了一个部分排序的数组。
这是我的测试代码的一个小例子:
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 文件吗?
编辑
这是我使用的代码片段。(这几乎是所有代码,但在这部分出错了)
这是我的主循环代码
这是我的缓冲区代码