Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于C或Java的非玩具软件事务性内存_Java_C_Transactions_Shared Memory - Fatal编程技术网

用于C或Java的非玩具软件事务性内存

用于C或Java的非玩具软件事务性内存,java,c,transactions,shared-memory,Java,C,Transactions,Shared Memory,我正在考虑通过一个或两个大学课程的引导实验室教授软件事务性内存的使用的可能性。我只知道Haskell的STM,但这门课的学生可能从未听说过 我已经在网上或其他问题(例如,)中找到了一些此类图书馆的列表。当你读到这篇文章的时候,我正在检查它们,但是它们中的许多似乎没有很好的文档(大多数都是研究原型,只是在论文中模糊地描述过,我更愿意教授一些更常用和有很好文档的东西)。 此外,维基百科提供的许多链接都悬而未决 总之,是否有针对工业项目(或至少非玩具项目,以确保一定的质量水平)的STM实施,并有良好的

我正在考虑通过一个或两个大学课程的引导实验室教授软件事务性内存的使用的可能性。我只知道Haskell的STM,但这门课的学生可能从未听说过

我已经在网上或其他问题(例如,)中找到了一些此类图书馆的列表。当你读到这篇文章的时候,我正在检查它们,但是它们中的许多似乎没有很好的文档(大多数都是研究原型,只是在论文中模糊地描述过,我更愿意教授一些更常用和有很好文档的东西)。 此外,维基百科提供的许多链接都悬而未决

总之,是否有针对工业项目(或至少非玩具项目,以确保一定的质量水平)的STM实施,并有良好的记录(为学生提供一些好的指导)


编辑:我不是这门课的老师,我只是在实验室里帮他。当然,在此之前,学生们将学习并发和分布式算法的基础知识。这只是一个在课程结束时提出不同建议的想法。

产品质量STM库不打算作为教学工具,甚至不是“最佳实践”。对于任何学院/大学课程来说,值得学习的可能是代码的1%;剩下的99%是本质-砂砾-平台相关的固有转角情况。有趣的1%不会以任何方式突出显示,因此您无法找到它

我建议学院/大学课程(无论是入门课程还是高级课程)自己实施STM buildingblocks(并且仅针对1个平台)

首先介绍以下问题:并发性、缓存

然后介绍我们的原子助手:cas/cmpxchg,fence

然后和你的学生一起做例子,先简单,再难,再复杂

首先介绍以下问题:并发性、缓存

从开始,我在大学学习并发性时讨论了一些好问题

  • 在计算机科学中,哲学家进餐问题是并行算法设计中经常使用的一个示例问题,用于说明同步问题和解决同步问题的技术


    (来源:)

使用来自Je Magee和Je Kramer的相同实现,并使用监视器解决问题

大多数共享内存应用程序使用
整数
比使用字符串更有效(这是因为
AtomicInteger
class for Java)。因此,在我看来,演示共享内存的最佳方法是让学生编写一个应用程序,使用
线程池来计算素数,或者计算一些
积分

线程和共享内存的一个很好的例子是

生产者-消费者问题(也称为有界缓冲区问题)是多进程同步问题的经典示例


(来源:)

实现发现,还有一个来自软件工程教授的实现


用于分布式算法和高度文档化的分布式数据结构。对于分布式编程库,请查看和(或对于C++)。也有in的实现。

现在有三种很好的STM方法

第一种方法是在C或C++中使用GCC和DO TM。从GCC4.7开始,通过-fgnu tm标志支持事务性内存。gcc维护人员已经做了很多工作,从4.9(主干)分支开始,您甚至可以使用hardware TM(例如Intel Haswell TSX)。TM at的接口有一个规范草案,这并不太痛苦。您还可以从TM社区找到gcc TM的用例(例如,请参阅transact 2014的应用程序跟踪报告:)

实现本身有点复杂,但这才是正确的。有很多关于错误的东西,尤其是在不安全的语言中,比如C或C++。GCC把所有这些事情都做好了。真的

第二种方法是使用Java。您可以使用非常容易扩展的DeuceSTM(类型安全性使TM实现更容易!),也可以使用Scala的Akka库进行STM。我更喜欢Deuce,因为它更易于扩展和使用(只需将一个方法注释为@Atomic,Deuce的java代理就可以完成其余的工作)


第三种方法是使用Scala。我在这方面做得不多,但研究人员似乎很喜欢阿克卡。如果您隶属于并行/分布式类,您甚至可能已经在使用Scala。

好的,请评论如何改进该问题,而不是否决并提出结束。要点很简单:我需要一个简单且有良好文档记录的实现。没有什么比匿名投票人和接近者更糟糕的了。我没有投反对票,但我只能猜测,投反对票/接近票是因为这个问题暗示缺乏研究。谷歌搜索“软件事务性内存”返回的第一个链接是一个维基百科页面,链接到C、Java和许多其他语言的实现。我认为“你能推荐…”或“最好的是什么…”的问题以“不具建设性”结尾。我不要求回复。我要的是一份记录良好的实现清单。到目前为止,我找不到任何好的文档…谢谢,为了澄清上下文,我编辑了这个问题。这门课是关于并发和分布式编程/算法的,我不是老师。无论是在课堂上还是在实验室里,都会有很多关于这个主题的背景知识。关于交易的这一点只会是额外的:我不会寻找更多的例子来讨论,所以我认为eznme的建议可能是最合适的。@Riccardo好的,那很好。只是分享一下