SML-NJ, как скомпилировать автономный исполняемый файл

Я начинаю изучать Standard ML, и теперь я пытаюсь использовать компилятор Standard ML из Нью-Джерси.

Теперь я могу использовать интерактивный цикл, но как я могу скомпилировать исходный файл в автономный исполняемый файл?

В C, например, можно просто написать

$ gcc hello_world. Я понимаю, что private уменьшает количество точек входа в объект блокировки за счет ужесточения инкапсуляции и ...

Очень часто используется частный статический объект только для чтения для блокировки в многопоточности. Я понимаю, что private уменьшает количество точек входа в объект блокировки за счет ужесточения инкапсуляции и, следовательно, доступа к наиболее важным.

Но почему статическое?

private static readonly object Locker = new object();

В конце концов, поле используется только внутри моего класса, и я мог бы также просто используйте вместо этого:

private readonly object Locker = new object();

Есть комментарии?

ОБНОВЛЕНИЕ:

В качестве примера я вставил этот код (просто пример). Я мог бы использовать статический или нестатический шкафчик для этого, и оба будут работать нормально. Учитывая ответ ниже, я должен скорее определять свой шкафчик следующим образом? (Извините, у меня собеседование на следующей неделе, и мне нужно знать все детали :)

private readonly object Locker = new object();

А вот код:

    private int _priceA;
    private int _priceB;
    private EventWaitHandle[] _waithandle;
    private readonly IService _service;

//ctor
public ModuleAViewModel(IService service)
    {
        _service = service;
        _modelA = new ModelA();
        _waithandle = new ManualResetEvent[2];
        _waithandle[0] = new ManualResetEvent(false);
        _waithandle[1] = new ManualResetEvent(false);
        LoadDataByThread();
    }


 private void LoadDataByThread()
        {
            new Thread(() =>
                           {
                               new Thread(() =>
                               {
                                   lock (Locker)
                                   {
                                       _priceA = _service.GetPriceA();
                                   }
                                   _waithandle[0].Set();
                               }).Start();

                               new Thread(() =>
                               {
                                   lock (Locker)
                                   {
                                       _priceB = _service.GetPriceB();
                                   }
                                   _waithandle[1].Set();
                               }).Start();

                               WaitHandle.WaitAll(_waithandle);
                               PriceA = _priceA;
                               PriceB = _priceB;
                           }).Start();
        }

Спасибо

104
задан Rotem 28 December 2012 в 13:57
поделиться