Seems like we'd need some form of (3) in order for any synchronization
to work properly, because a thread can't go ahead and continue
executing and expect to work until the code is fully loaded by the
other thread.

Is it safe to assume that most of the time, require is used to load
library code and not to continue the flow of execution in long-running
scripts? Because then to avoid deadlock we could have a thread that
discovers another thread is already loading the same library to wait
with a reasonable timeout. Would that scenario of mulitple threads
requiring the same code happen rarely enough that this would be a
strategy worth following?

/Nick

On Wed, Oct 15, 2008 at 2:11 PM, Thomas E Enebo <[EMAIL PROTECTED]> wrote:
> Keep a list of currently loading scripts and then have
> second/additional requires (note load may be different) of same file
> block until just that require finishes.   Deadlocks do seem possible:
>
> a.rb
>  require 'b'
>
> b.rb
>  require 'a'
>
> Thread 1: require 'a'
> Thread 2: require 'b'
>
> I have nothing concrete, but I think it is possible to work around
> this somehow?  I also wonder how rare this is.
>
> -Tom
>
> On Wed, Oct 15, 2008 at 2:23 AM, Charles Oliver Nutter
> <[EMAIL PROTECTED]> wrote:
>> I've got a question about require thread safety: should we try to enforce
>> it?
>>
>> For example, if two scripts try to require the same file at once, should we:
>>
>> 1. do what we do now, and potentially they both execute the file
>> 2. synchronize against the list of loaded features, such that they may both
>> search for the library but only one will load it; however, this won't
>> guarantee the library has been *completely* loaded
>> 3. synchronize against both the list of loaded features and any features
>> still in the process of loading; this guarantees that require will never
>> re-load a script and will not return until any other requires on other
>> threads have completed; but it may lead to deadlocks if two threads attempt
>> to load the same two libraries in different orders.
>>
>> At the moment I'm leaning toward improving the situation at least to (2)
>> above, but not doing (3) because MRI makes no such guarantees and the
>> deadlock potential is too high. Am I right about that? Other thoughts?
>>
>> - Charlie
>>
>> ---------------------------------------------------------------------
>> To unsubscribe from this list, please visit:
>>
>>   http://xircles.codehaus.org/manage_email
>>
>>
>>
>
>
>
> --
> Blog: http://www.bloglines.com/blog/ThomasEEnebo
> Email: [EMAIL PROTECTED] , [EMAIL PROTECTED]
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>    http://xircles.codehaus.org/manage_email
>
>
>

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to