thread-safe interfaces
Jim Blandy
(22 Dec 2003 07:40 UTC)
|
Re: thread-safe interfaces
Michael Sperber
(23 Dec 2003 09:34 UTC)
|
Re: thread-safe interfaces [correction] Jim Blandy (24 Dec 2003 22:27 UTC)
|
Re: thread-safe interfaces [correction] Jim Blandy 24 Dec 2003 22:23 UTC
[This correction was noted in another message already, but I'm reposting it as a reply to my original message so it'll be attached to the right thread. Sorry.] The post this message replies to contained a last-minute edit which made the main argument make no sense. A JNI-style reference-based interface does not address the limitations of SCHEME_EXTRACT_VALUE_POINTER and SCHEME_EXTRACT_STRING, as the previous message suggests. They do allow the collector to accurately find mutator threads' references to heap objects at any time. I should have written: Jim Blandy <xxxxxx@redhat.com> writes: > The proposal states that "the garbage collector may run whenever an > object is allocated in the heap." In context, I think that really > means, "the garbage collector may *only* run..." In a multi-threaded > context, I think this must mean that the collector may only run when > any thread allocates an object on the heap, which isn't much of a > restriction at all; the collector can run at any time. > > If that is so, then the way the proposal suggests C code should refer > to Scheme values makes it impossible for the collector to find and > relocate heap references. The C compiler may have stashed them > anywhere, in disguised forms, and it is probably unwilling to tell you > much about where they are at any given time. > > The Java Native Interface handles this problem by essentially > forbidding C code from ever referring directly to a GC'd object. > Instead, C code may only handle "references" to GC'd objects. This > restriction is enforced by the type system. References are explicitly > freed objects, which is way people are accustomed to working in C. > And because the explicit-free model is a complete pain in the neck, > the JNI tries to ease that pain by segregating references into "local" > and "global", where "local" references are freed for you at a > convenient time. > > Another issue is that, if a collection could occur at any time, the > values returned by macros like SCHEME_EXTRACT_VALUE_POINTER and > EXTRACT_STRING can't be trusted long enough to be useful. This can > be solved in various ways; one idea is sketched in: > > http://sources.redhat.com/ml/guile/1999-01/msg00093.html