Concurrency Erlang读写程序

Concurrency Erlang读写程序,concurrency,erlang,Concurrency,Erlang,我对Erlang非常陌生,目前我在用Erlang编写读写程序时遇到了问题。基本上,共享内存位置可以由任意数量的任务同时读取,但当任务必须写入共享内存位置时,它必须具有独占访问权限。 我的想法是将reader/write方法衍生到不同的流程中,并在这些方法中打印出类似“reader reading”/“Writer write”的内容 然而,信号量/互斥量的使用确实让我感到困扰,我在多线程/并发方面没有任何背景知识。有谁能给我一些如何编写这样的程序的线索吗 互斥体和信号量只是在两个并发进程/线程之

我对Erlang非常陌生,目前我在用Erlang编写读写程序时遇到了问题。基本上,共享内存位置可以由任意数量的任务同时读取,但当任务必须写入共享内存位置时,它必须具有独占访问权限。 我的想法是将reader/write方法衍生到不同的流程中,并在这些方法中打印出类似“reader reading”/“Writer write”的内容


然而,信号量/互斥量的使用确实让我感到困扰,我在多线程/并发方面没有任何背景知识。有谁能给我一些如何编写这样的程序的线索吗

互斥体和信号量只是在两个并发进程/线程之间定义同步点的一种方式。在erlang中,它们大部分被erlang进程之间的发送和接收消息所取代。在erlang中执行此操作的惯用方法是:

  • 在erlang中生成一个进程,用于存储数据和侦听消息
  • 生成向存储进程发送请求返回数据的消息的其他进程 或者发送要写入的数据

  • 数据进程的消息框将确保没有其他人可以像其他人一样同时写入数据。

    我认为现在应该忽略语言方面,而一般地研究锁、信号量和互斥体,以了解多线程。然后尝试在Erlang中实现它。Erlang除了以进程表的形式外没有共享内存。对于erlang来说,锁、信号量和互斥量也可以被认为是非惯用的,因为通过消息共享数据的不可变变量和进程在很大程度上使它们变得不必要。最后,我真的不明白你想要实现什么。你能扩展一点吗?你们都在说什么?互斥量和信号量在Erlang中不存在,也不需要。因此,我的答案如下。他还可以学习Erlang内存中的术语存储
    ETS
    @muzaayahoshua,但您仍然需要围绕ETS表的包装进程来控制访问;否则,在没有任何协调的情况下,您很容易将写入ETS的多个进程弄得一团糟。您需要一个互斥锁,这很容易在Erlang中使用进程实现,但是您也可以让进程直接控制ETS表。如果您不打算解释Erlang通过复制所有数据来解决这一问题,那么为什么还要使用“解释”POSIX原语呢?这样就不需要共享内存了。