31得票3回答
Clojure STM和Haskell STM有什么不同之处?

我试图找出Clojure所称的STM与Haskell中实现的STM之间的区别。撇开实际语言语义的差异,我有点困惑,因为Rich Hickey在他的演讲中说Clojure的STM实现与其他任何东西都非常不同,但我除了语言选择以外不理解这些差异。

22得票3回答
新特性“同步块”在C++中提供了什么优势?

有一个新的实验性特性(可能是C++20),名为“同步块”。该块提供了对代码段的全局锁定。以下是来自cppreference的示例。 #include <iostream> #include <vector> #include <thread> int f(...

21得票3回答
什么是事务内存?

我有点困惑,因为从维基页面上的阅读来看,好像只是在加载和存储时拥有一个checkValidate和commit系统。这个系统的目的是解决同步问题吗?它是建立在当前硬件之上的软件编程工具,还是通过ISA实现的硬件?每种实现(硬件/软件)之间有什么区别? 谢谢。

17得票4回答
软件事务内存 - 可组合性示例

软件事务内存(STM)的一个主要优点是可组合性和模块化,不同的代码片段可以组合成更大的组件。在基于锁的程序中,这通常不适用。 我正在寻找一个简单的示例来用实际代码说明这一点。我更喜欢Clojure语言的示例,但Haskell也可以。如果示例还展示了一些难以轻易组合的基于锁的代码,那就更好了。

16得票3回答
Clojure、Haskell(和其他语言)中用于STM的算法是什么?

据我所知,有多种不同的算法可用于实现软件事务内存(STM),这是一个非常活跃的研究领域。那么,在哪里可以找到使用不同语言和库的算法信息呢?特别是在Clojure和Haskell(GHC)中(无需深入源代码)。

16得票5回答
CLR和JVM这样的运行时是否能够使用Haswell TSX指令?

在阅读了Anandtech关于'Haswell TSX'(事务性内存屏障)之后,我立即想知道CLR/JVM是否能够在C#/Java/Scala/F#中为高度并行的应用程序(例如C# Rx/TPL/TFD)中使用这些功能。

15得票2回答
一种在不轮询的情况下形成MVars上的“选择”方式

我有两个MVars(实际上是一个MVar和一个Chan)。我需要从Chan中取出东西并处理它们,直到另一个MVar不再为空为止。我的理想解决方案类似于UNIX的select函数,我向其中传递一组(可能为空的)MVars,并且线程会阻塞,直到其中一个MVar被填满,然后它会返回已填满的MVar。...

14得票3回答
STM monad问题

这只是一个假设场景,目的是为了解释我的问题。假设有两个线程和一个TVar在它们之间共享。一个线程中有一个原子块,它读取TVar并需要10秒才能完成。另一个线程中有一个原子块,它每秒修改一次TVar。第一个原子块会完成吗?显然,它只会不断回到开头,因为日志始终处于不一致状态。

11得票5回答
有人尝试过在C++中使用事务性内存吗?

我正在查看英特尔的“whatif”网站和他们的事务内存编译器(每个线程必须进行原子提交或回滚系统的内存,就像数据库一样)。 这似乎是一种有前途的替代锁和互斥锁的方式,但我找不到很多证明。这里有人有任何意见吗?

10得票1回答
如何使Haskell的TChan像Erlang的消息队列一样延迟发送消息?

请考虑以下 Erlang 代码:-module(testit). -export([testit/0]). testit() -> Pid = spawn(fun testit_proc/0), Pid ! final, Pid ! one, Pid !...