如何在 erlang nif 中编写单例资源?

How can I write a singleton resource in erlang nif?

有没有办法在c中写一个单例class,然后通过NIF将它作为资源传输到erlang?

Resources 只是指向内存的指针。这些指针可以是 class 实例的方向(尽可能多的单例),从而与拥有资源副本或指向同一内存的另一个资源的任何人共享它。

请记住以下几点:

  1. 对内存的访问应该是同步的,也许使用mutexes or condition variables
  2. 资源可以跨节点发送,但它们只与创建它的节点相关。如果您尝试取消引用另一个节点中的资源,则会出现错误。
  3. 如果资源没有引用,它可能会像任何其他术语一样被 GC(您可以提供析构函数)。如果资源转到另一个节点并返回,但没有保存对该资源的引用,则它可能已被收集。

除了创建单例之外 "as simple" 为:

  1. 在NIF模块加载时初始化内存,存放在模块的priv data
  2. 创建resources指向那个内存,想用就用资源
  3. 通过适当的同步方法访问资源内存