JQuery, свяжите ту же функцию с keyup событием 3 других текстовых полей

На теоретическом уровне они не отличаются семантически. Можно реализовать взаимное исключение с помощью семафоров или наоборот (см. здесь для примера). На практике реализация отличается, и они предлагают немного отличающиеся услуги.

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

На самом низком уровне, они используют своего рода атомарное тест и устанавливают механизм. Это читает текущее значение ячейки памяти, вычисляет своего рода условное выражение и выписывает значение в том местоположении в единственной инструкции, которая не может быть прервана . Это означает, что можно получить взаимное исключение и протестировать, чтобы видеть, было ли у кого-либо еще оно перед Вами.

А типичная взаимоисключающая реализация имеет процесс или поток, выполняющий инструкцию теста-и-набора и оценивающий, установило ли что-либо еще взаимное исключение. Ключевой пункт здесь - то, что нет никакого взаимодействия с планировщик , таким образом, мы понятия не имеем (и не заботьтесь), кто установил блокировку. Тогда мы или бросаем наш интервал времени и делаем попытку его снова, когда задача перенесена, или выполнитесь спин-блокировка . Спин-блокировка является алгоритмом как:

Count down from 5000:
     i. Execute the test-and-set instruction
    ii. If the mutex is clear, we have acquired it in the previous instruction 
        so we can exit the loop
   iii. When we get to zero, give up our time slice.

, Когда мы закончили выполнять наш защищенный код (известный как критический раздел ) мы просто обнуляем взаимоисключающее значение или независимо от того, что означает 'ясный'. Если несколько задач пытаются получить взаимное исключение они следующая задача, которая, оказывается, планируется после того, как взаимное исключение выпущено, получит доступ к ресурсу. Обычно Вы использовали бы взаимные исключения для управления синхронизируемым ресурсом, где эксклюзивный доступ только необходим в течение очень коротких периодов времени, обычно для создания обновления структуры совместно используемых данных.

семафор А является синхронизируемой структурой данных (обычно использующий взаимное исключение), который имеет количество и некоторые обертки системного вызова, которые взаимодействуют с планировщиком в немного большей глубине, чем взаимоисключающие библиотеки были бы. Семафоры увеличены и постепенно уменьшены и привыкли к [1 110] блок задачи, пока что-то еще не готово. См. проблема Производителя/Потребителя для простого примера этого. Семафоры инициализируются к некоторому значению - двоичный семафор является просто особым случаем, где семафор инициализируется к 1. Регистрация на семафор имеет эффект пробуждения ожидающего процесса.

А основной семафорный алгоритм похож:

(somewhere in the program startup)
Initialise the semaphore to its start-up value.

Acquiring a semaphore
   i. (synchronised) Attempt to decrement the semaphore value
  ii. If the value would be less than zero, put the task on the tail of the list of tasks waiting on the semaphore and give up the time slice.

Posting a semaphore
   i. (synchronised) Increment the semaphore value
  ii. If the value is greater or equal to the amount requested in the post at the front of the queue, take that task off the queue and make it runnable.  
 iii. Repeat (ii) for all tasks until the posted value is exhausted or there are no more tasks waiting.

В случае двоичного семафора основным практическим различием между этими двумя является природа системных служб, окружающих фактическую структуру данных.

РЕДАКТИРОВАНИЕ: Как evan справедливо указал, спин-блокировки замедлят единственную машину процессора. Вы только использовали бы спин-блокировку на многопроцессорном поле, потому что на единственном процессоре процесс, содержащий взаимное исключение, никогда не будет сбрасывать его, в то время как другая задача работает. Спин-блокировки только полезны на многопроцессорных архитектурах.

6
задан Miral 15 August 2013 в 15:41
поделиться

5 ответов

Вам нужно сделать следующее:

// Edit according to request in the comment: 
// in order to select more than one element,
// you need to specify comma separated ids.
// Also, maybe you need to consider to use a CSS class for the selected elements,
// then it could be just $(".className")
$("#element1, #element2, ....").bind("keyup", CalculateTotalOnKeyUpEvent);

Вам нужно передать функцию как параметр, вам не нужно передавать функцию в том виде, в котором она была объявлена.

12
ответ дан 8 December 2019 в 12:22
поделиться
$("#txt1, #txt2, #txt3").keyup(fn);
5
ответ дан 8 December 2019 в 12:22
поделиться
$("#compensation").bind("keyup",CalculateTotalOnKeyUpEvent(keyupEvent));

Когда вы пишете CalculateTotalOnKeyUpEvent (keyUpEvent) [обратите внимание на () после имени функции], вы выполняете CalculateTotalOnKeyUpEvent и назначаете результат функции событию нажатия клавиши.

Вам следует сделайте что-нибудь вроде:

$('#compensation, #otherId1, #otherId2')
    .bind('keyup', CalculateTotalOnKeyUpEvent);

Где 'otherId1' и 'otherId2' - идентификаторы еще двух текстовых полей.

0
ответ дан 8 December 2019 в 12:22
поделиться

Вы вызываете CalculateTotalOnKeyUpEvent немедленно, а не передаете его в качестве аргумента. Попробуйте следующее:

$("#compensation").bind("keyup",CalculateTotalOnKeyUpEvent);
0
ответ дан 8 December 2019 в 12:22
поделиться

или просто дайте всем трем текстовым полям один и тот же класс, и вам хорошо go

2
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

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