Семафор JavaScript / тест-и-набор / блокировка?

Вот рабочий код: http://jsfiddle.net/ftbaw0ps/1/

Пожалуйста, используйте правильный синтаксис HTML, например:

What is the name of Black Panther's home?

K'un Lun Wakanda Kamar Taj

How did Dr Strange defeat Dormammu?

Built An Energy Prison Create a Time Loop Froze Time

С другой стороны, @sjdm ответил на ваш вопрос: когда вы используете правильный селектор для ввода, вы должны всегда применять стиль к нему / им.

#choice{
  width: 10px;
}

51
задан joe_coolish 28 April 2014 в 03:20
поделиться

3 ответа

JavaScript не имеет никакой семантики блокировки, потому что JS не является многопоточным языком. Несколько потоков могут только работать одновременно в абсолютно отличных контекстах - например, Рабочие потоки HTML5, или в вещах как несколько экземпляров объекта контекста API JavaScriptCore (я предполагаю, что SpiderMonkey имеет подобное понятие). У них не может быть общего состояния, таким образом, в сущности все выполнение является атомарным.

Хорошо, поскольку Вы теперь предоставили часть своего кода, который я принимаю, у Вас есть что-то сродни:

External Process:
<JSObject>.isRunning = true;
doSomething()
<JSObject>.done()

Или некоторые такой (использование соответствующих API). В этом случае я ожидал бы, что механизм JS заблокируется, если JS выполнится в контексте Вашего объекта js (который является тем, что JavaScriptCore сделал бы), то приводя это к сбою необходимо будет, вероятно, поместить руководство, закрепляют вокруг js выполнения.

, Какой механизм Вы используете, чтобы сделать все это? Я спрашиваю, потому что на основе Вашего описания это кажется на установку флага от вторичного потока с языка non-JS с помощью API C/C++, обеспеченного тем языком, и большинство механизмов JS предполагает, что любое управление состояния, сделанное через API, будет происходить на единственном потоке, обычно тот же поток, на котором происходит все выполнение.

21
ответ дан olliej 7 November 2019 в 10:25
поделиться

Возможно, Вы могли реализовать основной целочисленный семафор, просто добавить переменную в DOM и блокировать/разблокировать его и удостовериться, что Ваши функции продолжают проверять его, еще тайм-аут их =)

при использовании платформы, такой как Mootools, Вы могли бы попытаться обработать поток приложения с событиями, такими как onComplete и так далее.

2
ответ дан johnnyRose 7 November 2019 в 10:25
поделиться

У меня была та же проблема, вот то, как я решил ее. Это хорошо работает для двух параллельных процессов. Если у Вас есть три процесса или больше, возможно, что два процесса запускаются вместе.

var isRunning = false;
...
var id = setInterval(function(){ //loop until isRunning becomes false
            if (!isRunning){
                isRunning = true;
                //do something synchronous or use a promise
                isRunning = false;
                clearInterval(id); // stop the loop here
            }
        , 10);

Это лучше, чем цикл с условием продолжения, потому что это решает проблемы параллелизма / асинхронные проблемы для чтения/установки isRunning.

0
ответ дан 7 November 2019 в 10:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: