首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ocaml和jane street异步的可变数据

使用ocaml和jane street异步的可变数据
EN

Stack Overflow用户
提问于 2015-01-05 17:06:04
回答 1查看 294关注 0票数 2

我正在OCaml中使用Jane Street的异步库进行并发性项目。我希望有多个TCP服务器接收输入,其处理程序操作单个哈希表( Hashtbl.t)。这个场景似乎需要我用互斥(Mutex.t)来保护我的哈希表。

然而,当我阅读异步文档和really Ocaml中有关异步的章节时,我得到的印象是,有一个使用Deferred.tPipe.t的“异步世界”,以及一个使用线程和Mutexes的“系统线程世界”,而唯一的混合方法是使用Thread_safe模块,所以我不太愿意把互斥放入异步计算中。

因此,基本上,在异步中进行并发计算时,我应该如何保护共享的可变数据结构?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-05 17:20:49

通常,如果可以以原子方式执行,则不需要使用互斥锁来保护某些操作。但这句话根据上下文的不同有不同的含义。

在异步上下文中,原子操作最严格的定义是不具有'a Deferred.t类型的操作。换句话说,如果它没有被延迟,那么它是原子的,在它的执行过程中,它不能被任何其他线程中断。实际上,由于async库实现了协作线程,所以您始终知道给定函数是否可以被中断,这与抢占线程不同。

这意味着您可以使用任何OCaml模块,当然包括哈希表,而不需要任何互斥,因为它们的所有操作都是原子的。

在合作多线程处理中,Mutexes很少被需要。通常,要实现事务行为。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27784389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档