【发布时间】:2015-01-02 14:02:25
【问题描述】:
NIF 实现可以使用常规 C/C++ 线程锁定原语还是必须使用 NIF API(enif_mutex_lock(..), enif_mutex_create(..), 等)
【问题讨论】:
-
如果对您有帮助,
enif_mutex_lock()的实现方式如下:github.com/erlang/otp/blob/…。看起来线程被标记为被阻止。 -
尝试先写一个端口——大多数时候你实际上并不需要一个NIF。如果您必须编写 NIF(这应该是最后的手段),请使用 NIF API。或者期望你的整个虚拟机因为你太聪明而变得不稳定。
-
@zxq9 来自官方文档:“NIF 比使用端口驱动程序更简单、更有效地调用 C 代码。”
-
@GabiMe 确实如此。但是,一旦您开始谈论互斥锁和锁之类的东西,您就完全否定了第二位的目的:“ NIF 最适合示例中的 foo 和 bar 之类的同步函数,它可以进行一些相对较短的计算而没有副作用,并且返回结果。”如果这种情况成立,您无需担心锁定任何东西,而是需要使用端口。嗯...无论哪种方式,这都是一次学习经历。
标签: c erlang erlang-nif