问题标签 [tvar]

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 回答
1463 浏览

haskell - Haskell:TVar 是如何工作的?

TVar 是如何工作的?从我读过的内容来看,它会在收到它们后立即尝试运行所有事务,但是,完成的事务会使其他当前正在运行的事务无效,然后必须重新启动。TVar 是这样工作的吗?

如果是这种情况,如果每 100 毫秒发生 1 毫秒长的事务,这是否意味着需要 200 毫秒来处理的事务永远不会完成?

0 投票
2 回答
968 浏览

haskell - Haskell:自动更新两个或多个 TVar。可能的?

TVar一个事务可以以原子方式更新两个不同的 s 吗?即我可以用大量的 s 组成数据结构TVar来减少争用吗?如果是这样,你能举个例子吗?

0 投票
3 回答
851 浏览

haskell - Haskell:TVar:防止饥饿

我正在考虑使用 TVar 在 Web 应用程序中存储一些状态(可以在重新启动时重新创建)。但是,我担心 TVar 的争用方面。似乎频繁的短时间运行的事务可以通过不断地中断较长的事务来饿死它们。此外,随着更多运行时间较长的事务不断重启,这将增加 CPU 的负载,从而进一步增加这些事务的长度。最终我觉得这可能会导致服务器完全没有响应。

考虑到这一点,我有以下问题:

(1) TVar(或其他数据类型)可以使用锁,而不是同时尝试/重试。

(2)TVar(或其他数据类型)能否有一些不同的争用机制,即“让事务在运行另一个事务之前运行一秒钟”,或者至少有一些保证事务最终会完成(即防止对运行时间更长的事务)。

0 投票
1 回答
989 浏览

haskell - Haskell: TVar: orElse

orElse当由于另一个事务写入TVar它已读取的事务而重试事务时,是否调用“else”部分,或者仅在retry显式调用时调用?

0 投票
1 回答
125 浏览

haskell - 使用事务内存的类型错误

我在haskell中使用事务变量,我在一个函数中实例化并收集在一个列表中,然后我给另一个函数写入值:

我在函数 moveGhost 中使用这些共享变量(存储在 ghosts 中):

虽然我对两个共享变量 buff 使用与 res 相同的策略,但使用时出现错误Tvar res

有谁知道这个 TVar 的问题是什么以及为什么它不是 TVar buff 的问题?

0 投票
2 回答
320 浏览

haskell - Haskell STM 分片 TVAR

我是 Haskell 和 STM 的新手,我正在尝试理解基本概念。

一般来说,在 Haskell 和函数式编程中,如果我错了,请纠正我,没有赋值之类的东西。

我不能写x=3;我所能做的就是用xand生成另一个绑定3

现在谈到 TVar 和线程,如果我有多个线程共享同一个 TVar,如果一个线程更改值,使用writeTVar,其他线程将看到更改的值,对吗?

所以如果我有 2 个线程共享同一个TVar Intvar,第一个线程加 1,如果成功,第二个线程会看到更新的值吗?

塔克斯

0 投票
1 回答
144 浏览

haskell - 在 GHCi 中查看 TVar 的值

通过Simon Peyton Jones并发示例,我有以下代码:

我正在尝试在 GHCi REPL 中对此进行测试

如何验证我的支票余额是 110 美元?

我试过了

0 投票
2 回答
781 浏览

haskell - Haskell 代码中充斥着 TVar 操作和带有许多参数的函数:代码异味?

我正在用 Haskell 编写一个 MUD 服务器(MUD = Multi User Dungeon:基本上,一个多用户文本冒险/角色扮演游戏)。游戏世界数据/状态用大约 15 个不同IntMap的 s 表示。我的 monad 转换器堆栈看起来像这样:ReaderT MudData IO,其中MudData类型是包含IntMaps 的记录类型,每个都有自己的TVar(我使用 STM 进行并发):

...等等。(我使用的是镜头,因此是下划线。)

一些功能需要某些IntMaps,而其他功能需要其他功能。因此,每一个IntMap都有自己的TVar提供粒度。

但是,我的代码中出现了一种模式。在处理播放器命令的函数中,我需要TVar在 STM monad 中读取(有时稍后写入)我的 s。因此,这些函数最终在它们的where块中定义了一个 STM 助手。这些 STM 助手通常有很多readTVar操作,因为大多数命令需要访问少数IntMaps. 此外,给定命令的函数可能会调用许多纯辅助函数,这些函数也需要部分或全部IntMaps. 因此,这些纯辅助函数有时最终会接受很多参数(有时超过 10 个)。

因此,我的代码变得“乱七八糟”,包含大量带有大量readTVar参数的表达式和函数。这是我的问题:这是代码异味吗?我是否缺少一些使我的代码更优雅的抽象?有没有更理想的方式来构建我的数据/代码?

谢谢!

0 投票
0 回答
455 浏览

r - R:“dimnames”[2] 的长度不等于数组范围

我正在尝试使用 tsDyn 包在“r”中运行阈值自回归模型。

我在“r”中运行了以下命令:

我收到以下错误消息:

我的时间序列对象如下所示:

根据请求编辑:

我不明白错误消息或我能做些什么来修复它?

我非常感谢任何帮助。

此致

拉斯穆斯·达姆加德

0 投票
1 回答
217 浏览

multithreading - 使用 TVar 时如何等到 forM_ 完成?

我正在编写一个函数,在其中使用 处理列表forM_,并将结果附加到TVar列表中:

结果总是空的,如果我用-threaded. 怎么可能等待线程完成?我不能使用MVarAsync。我必须使用TVar, 或其他基于的数据结构来解决这个问题TVar