gpt4 book ai didi

chapel - 人们应该如何等待教堂里的条件成为现实?

转载 作者:行者123 更新时间:2023-12-01 12:15:37 25 4
gpt4 key购买 nike

考虑以下简化情况——任务 A 递增计数器 i(同时可能还做一些工作),而任务 B 需要在 i 到达时开始其任务一个特定的值。任务 A 不知道 B 的存在,所以我不能假设 A 可以在满足条件时向 B 发出信号。但是 B 可以读取 i,尽管 i 很可能对 B 来说是远程的。

B 检查 i 是否达到/超过某个值的最佳方式(或最惯用的方式)是什么?

我想到了几个不同的选项(其中一些不起作用):

  1. 一个简单的 while 循环,没有主体 -- 这会锁定任务,还是 Chapel 有时会从 while 循环中退出?此外,我假设正确的过程是在 i 的语言环境中执行 while 循环。

  2. 使用原子和 waitFor 方法——不幸的是,这不起作用,因为 i 可能已经超过了感兴趣的值。

最佳答案

它有点难看,但您可以实现 waitFor() 的细微变化.像这样的东西:

on i {
while i.read() < valueOfInterest {
chpl_task_yield();
}
}

请注意,您必须自己明确执行 chpl_task_yield()。 Chapel 不会自动将 yield 插入到循环或任何东西中。

你也可以制作一个包装器:

proc waitUntil(i, valueOfIterest) where isAtomic(i) {
on i {
while i.read() < valueOfIterest {
chpl_task_yield();
}
}
}
waitUntil(i, valueOfInterest);

理想情况下,签名更像是 proc waitUntil(i: atomic(?t), valueOfInterest: t),但目前不支持。

关于chapel - 人们应该如何等待教堂里的条件成为现实?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com