Synchronized functions

Tal Liron tal.liron at threecrickets.com
Fri Oct 11 02:28:58 PDT 2013


The Scripturian environment is designed for multi-threadedness and does 
the "right thing" in terms of Nashorn contexts/globals to ensure 
separation. In concurrent environments, using locks can be useful. Might 
not the best choice for high concurrency, but it sometimes it's 
necessary, especially when working with 3rd party libraries.

It would be nice if "sync" were added to mozilla_compat. Isn't the whole 
point of it to support legacy code?

On 10/11/2013 05:23 PM, Hannes Wallnoefer wrote:
> Actually Rhino exposes a "sync" function for this purpose, 
> org.mozilla.javascript.Synchronizer is just the class implementing 
> this feature and not meant to be used directly by scripts.
>
> While you could do something like this in Nashorn I would advise 
> against it. Thread-safety is not one of the primary design goals in 
> Nashorn, and nowadays most people would agree that there are better 
> and safer ways for working with threads. I suggest looking at 
> Worker/Actor models where you have multiple script engines working 
> together through message passing.
>
> Hannes
>
> Am 2013-10-11 10:45, schrieb Tal Liron:
>> Thanks!
>>
>> Would it be possible to add this to mozilla_compat.js so that "new 
>> org.mozilla.javascript.Synchronizer(myFunction)" would work?
>>
>> On 10/11/2013 03:31 PM, A. Sundararajan wrote:
>>> There is a 'sync' function in a demo application (jconsole script 
>>> plugin).  This may be of use.
>>>
>>>     var sync = function(func, obj) {
>>>         if (arguments.length < 1 || arguments.length > 2 ) {
>>>             throw "sync(function [,object]) parameter count mismatch";
>>>         }
>>>
>>>         var syncobj = (arguments.length == 2 ? obj : this);
>>>
>>>         if (!syncobj._syncLock) {
>>>             syncobj._syncLock = new Lock();
>>>         }
>>>
>>>         return function() {
>>>             syncobj._syncLock.lock();
>>>             try {
>>>                 func.apply(null, arguments);
>>>             } finally {
>>>                 syncobj._syncLock.unlock();
>>>             }
>>>         };
>>>     };
>>>
>>> See also: 
>>> https://blogs.oracle.com/nashorn/entry/nashorn_multi_threading_and_mt
>>>
>>> -Sundar
>>>
>>> On Thursday 10 October 2013 03:16 PM, Tal Liron wrote:
>>>> How does one create synchronized functions in Nashorn?
>>>>
>>>> Rhino has this facility:
>>>>
>>>> function myFunction() { ... }
>>>> myFunction = new org.mozilla.javascript.Synchronizer(myFunction)
>>>
>>
>



More information about the nashorn-dev mailing list