[erlang-questions] nif driver c code must be reentrant?
Tue May 21 09:54:31 CEST 2013
I believe there is no API nor technical mean to make NIFs reentrant
currently. Hence you should refrain from making NIFs which can run for
a long time.
But if you want to make NIFs more friendly to the scheduler, you can
use erlang:bump_reductions/1 from Erlang wrapper of a NIF call.
On Tue, May 21, 2013 at 4:14 AM, 韦崇焜 <wckbluesky@REDACTED> wrote:
> I try to design some nif codes recently and I reading a book " Erlang and
> OTP in Action" now. In this book, chapter 12, "Integrating with foreign code
> using ports and NIFs", page 313, section "Making a linked driver".
> I found some words:
> Because all these instances execute
> within the memory of the Erlang VM, possibly running as different threads, the driver
> code must be designed to be reentrant—executable by multiple simultaneous callers—
> and must not depend on global variables or locks.
> and then, this book give some methods to avoid this problem, something like
> not to use global variables, and use driver_alloc, driver_free to allocate
> memory dynamically.
> of course, these words were placed into the section "Making a linked
> My questions is:
> 1) Is nif driver c code has the same problem? That is, nif driver c code
> must be designed to reentrant?
> 2) I know that, nif calling will block the VM until the driver c code
> returns, Is that other problems we must notice when using nifs?
> And if nif driver c code must be designed to reentrant, then I will have
> anther question.
> I read this words from erlang.org
> NIFs are called directly by the same scheduler thread that executed the
> calling Erlang code. The calling scheduler will thus be blocked from doing any
> other work until the NIF returns
> That is, calling scheduler is driven by the same thread, so the calling
> will be blocked.
> Then why should we designed our nif code to be reentrant?
> The e-mail is little long, thanks for reading, and I do hope to receive any
> helpful messages.
> Best Regards
> erlang-questions mailing list
More information about the erlang-questions