问题标签 [barrier]

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 投票
2 回答
1601 浏览

c# - 任务与障碍

所以我的问题如下:我有一个要处理的项目列表,我想并行处理这些项目,然后提交已处理的项目。

C# 中的屏障类将允许我执行此操作 - 我可以并行运行线程来处理项目列表,当调用 SignalAndWait 并且所有参与者都遇到障碍时,我可以提交已处理的项目。

Task 类也将允许我执行此操作 - 在 Task.WaitAll 调用中,我可以等待所有任务完成并且可以提交已处理的项目。如果我理解正确,每个任务都将在它自己的线程上运行,而不是在同一个线程上并行运行一堆任务。

  1. 我对问题的两种用法的理解是否正确?
  2. 两者之间有什么优势吗?
  3. 有什么混合解决方案更好的方法(障碍和任务?)。
0 投票
1 回答
111 浏览

java - Java Thread.suspend 精确语义

这个问题不是关于 Thread.suspend 的替代品。这是关于使用 Thread.suspend 实现偏置锁的可能性,(我相信)不能使用 Thread.interrupt 或类似的替代方案来实现。

我知道 Thread.suspend 已被弃用。

但我想知道 Thread.suspend 的精确语义。

如果我调用 thread1.suspend(),我是否保证在 thread1 完全停止之前被阻塞?如果我调用thread1.resume(),这个调用对其他线程是否可见?

此外,如果我成功挂起一个线程,该线程是否会在某个安全点被挂起?我会看到它的中间状态(因为即使在未正确同步的程序中,Java 也会无中生有地禁止值,我不相信这是允许的)还是看到一些乱序(如果挂起是异步请求,那么我肯定会看到那种东西)?

我想知道这些,因为我想在 Java 中实现一些玩具不对称锁(比如 HotSpot 中的 BiasedLock)。使用 Thread.suspend,您可以实现类似 Dekker 的锁,而无需存储负载障碍(并将负担转移到稀有路径)。我的实验表明它有效,但由于 Thread.sleep 足以等待远程上下文切换,我不确定这是保证行为。

顺便问一下,有没有其他方法可以强制(或检测)远程屏障?例如,我在网上搜索并发现其他人使用 FlushProcessWriteBuffers 或更改亲和力来将线程绑定到每个内核。这些技巧可以在 Java 中完成吗?

编辑

我想出了一个主意。也许我可以使用 GC 和终结器来实现偏向锁,至少如果那里只有两个线程。不幸的是,慢速路径可能需要明确的 gc() 调用,这并不实际。

如果 GC 不精确,我可能会陷入僵局。如果 GC 太聪明并在我取消引用之前收集我的对象(也许允许编译器重用堆栈变量,但允许编译器对堆变量做这些事情,忽略获取围栏和加载围栏?),我最终得到损坏的数据。

编辑

似乎需要一个所谓的“可达性围栏”来防止优化器向上移动对象的最后一个引用。不幸的是,它不在哪里。

0 投票
1 回答
122 浏览

parallel-processing - 在块中找到最大值的 OpenCL 障碍

我在 Nvidia 的开发者网站上找到了一段 OpenCL 内核示例代码,目的功能maxOneBlock是找出数组的最大值maxValue并将其存储到 maxValue[0]。

我完全了解循环部分,但对unroll部分感到困惑:为什么展开部分不需要在每个步骤完成后同步线程?

eg:当一个线程完成localId和localId+32的比较后,如何保证其他线程已经将其结果存入localId+16?

内核代码:

0 投票
1 回答
2448 浏览

openmp - 欧普障碍正在阻挡

我有一个代码:

和输出:

如果我将 2 in for 更改为 8,它可以工作。但我想在我的 for 循环中有 2 个。

如何在循环之前不使用 omp_set_num_threads(2) 使我的代码工作?(当我放这个时它也有效)

0 投票
1 回答
1715 浏览

algorithm - Matlab中的障碍函数

在matlab哪里可以找到障碍函数的实现?我正在尝试查看算法interior-point是如何实现的,这就是我最后发现的fmincon.m

所以我想看看有什么障碍但失败了。

我有: 在此处输入图像描述

0 投票
2 回答
1314 浏览

c++ - 创建所有线程后 pthread_barrier_wait 挂起

我正在尝试编写一个简单的程序来使用屏障来等待创建多个线程,然后再从主打印消息。

这是我的代码:

目前,我的程序打印了一些不确定的“Hello from thread”语句,并在打印“Hello from main!”之前挂起;但是,它总是打印 8 条线程消息。因此,创建了所有线程。

为什么还挂着?

0 投票
1 回答
237 浏览

ios - 如何防止temporaryContext与migratePersistentStore同时运行

我有一个我打电话的代码部分,migratePersistentStore我想阻止任何temporaryContext人同时做任何事情,怎么做?

我的想法是基于 asemaphore和 a dispatch_group

代码一:

代码 B:

你怎么看待这件事?有什么更好的解决方案吗?dispatch_barrier_async在这种情况下可以使用吗?

0 投票
0 回答
62 浏览

c# - c# 2个队列之间的同步

我试图弄清楚如何同步对 2 个相关队列的并发访问

我有一台服务器,处理来自多个客户端的请求。这些客户想一起玩(一对一),他们会指定是否要先开始。我必须通过排队所有客户来处理他们的游戏请求,然后将它们配对(想先与那些不想先玩的人玩),并让他们知道是否找到任何匹配的队友

到目前为止我尝试了什么:

我尝试使用屏障类但没有取得更多成功:

很容易阻止直到找到2个玩家,然后继续,但是无法处理1个第一和1个第二玩家的特定情况......

我是否缺少使用任何框架类的简单方法?我的代码看起来很难看,我必须维护很多并发集合来完成一个简单的任务

0 投票
1 回答
681 浏览

c++ - MPI 代码不适用于 2 个节点,但适用于 1 个节点

超级编辑:

添加广播步骤将导致ncols主节点由两个进程打印(我可以从中检查输出)。但为什么?我的意思是,所有广播的变量在它们的声明行中已经有一个值!!!(题外话


我有一些基于这个例子的代码。

我使用这个简单的程序检查了集群配置是否正常,该程序还打印了它将运行的机器的 IP:

它打印了每台机器的IP两次。


EDIT_2

如果我(仅)打印网格,就像在示例中一样,我将获得一台计算机:

对于两个:

0 投票
1 回答
313 浏览

scala - barrier for multiple nodes

I'm trying to get the same functionality as a barrier in interprocess communication, but now for distributed nodes.

My problem is that I have multiple distributed processes over nodes. They have some non-deterministic setup, and after the setup I want them to start running at the same time.

Is there a simple framework which allows me to do this in Scala?