问题标签 [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.
c# - 任务与障碍
所以我的问题如下:我有一个要处理的项目列表,我想并行处理这些项目,然后提交已处理的项目。
C# 中的屏障类将允许我执行此操作 - 我可以并行运行线程来处理项目列表,当调用 SignalAndWait 并且所有参与者都遇到障碍时,我可以提交已处理的项目。
Task 类也将允许我执行此操作 - 在 Task.WaitAll 调用中,我可以等待所有任务完成并且可以提交已处理的项目。如果我理解正确,每个任务都将在它自己的线程上运行,而不是在同一个线程上并行运行一堆任务。
- 我对问题的两种用法的理解是否正确?
- 两者之间有什么优势吗?
- 有什么混合解决方案更好的方法(障碍和任务?)。
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 太聪明并在我取消引用之前收集我的对象(也许允许编译器重用堆栈变量,但允许编译器对堆变量做这些事情,忽略获取围栏和加载围栏?),我最终得到损坏的数据。
编辑
似乎需要一个所谓的“可达性围栏”来防止优化器向上移动对象的最后一个引用。不幸的是,它不在哪里。
parallel-processing - 在块中找到最大值的 OpenCL 障碍
我在 Nvidia 的开发者网站上找到了一段 OpenCL 内核示例代码,目的功能maxOneBlock
是找出数组的最大值maxValue
并将其存储到 maxValue[0]。
我完全了解循环部分,但对unroll
部分感到困惑:为什么展开部分不需要在每个步骤完成后同步线程?
eg:当一个线程完成localId和localId+32的比较后,如何保证其他线程已经将其结果存入localId+16?
内核代码:
openmp - 欧普障碍正在阻挡
我有一个代码:
和输出:
如果我将 2 in for 更改为 8,它可以工作。但我想在我的 for 循环中有 2 个。
如何在循环之前不使用 omp_set_num_threads(2) 使我的代码工作?(当我放这个时它也有效)
algorithm - Matlab中的障碍函数
在matlab哪里可以找到障碍函数的实现?我正在尝试查看算法interior-point
是如何实现的,这就是我最后发现的fmincon.m
所以我想看看有什么障碍但失败了。
我有:
c++ - 创建所有线程后 pthread_barrier_wait 挂起
我正在尝试编写一个简单的程序来使用屏障来等待创建多个线程,然后再从主打印消息。
这是我的代码:
目前,我的程序打印了一些不确定的“Hello from thread”语句,并在打印“Hello from main!”之前挂起;但是,它总是打印 8 条线程消息。因此,创建了所有线程。
为什么还挂着?
ios - 如何防止temporaryContext与migratePersistentStore同时运行
我有一个我打电话的代码部分,migratePersistentStore
我想阻止任何temporaryContext
人同时做任何事情,怎么做?
我的想法是基于 asemaphore
和 a dispatch_group
。
代码一:
代码 B:
你怎么看待这件事?有什么更好的解决方案吗?dispatch_barrier_async
在这种情况下可以使用吗?
c# - c# 2个队列之间的同步
我试图弄清楚如何同步对 2 个相关队列的并发访问
我有一台服务器,处理来自多个客户端的请求。这些客户想一起玩(一对一),他们会指定是否要先开始。我必须通过排队所有客户来处理他们的游戏请求,然后将它们配对(想先与那些不想先玩的人玩),并让他们知道是否找到任何匹配的队友
到目前为止我尝试了什么:
我尝试使用屏障类但没有取得更多成功:
很容易阻止直到找到2个玩家,然后继续,但是无法处理1个第一和1个第二玩家的特定情况......
我是否缺少使用任何框架类的简单方法?我的代码看起来很难看,我必须维护很多并发集合来完成一个简单的任务
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?