Название вопроса ересь, вот пример задачи.
Задача такая.  Реализовать (визуализировать) на самом самом самом низком уровне  процессора АЛУ. К примеру операцию сложения.  
Что есть. Есть 2  переменных, которых нужно сложить, эти переменные, имеют на set-рах   события OnChange() при каждом изменении(или не изменении).
Есть функция Sum() которая должна вызываться в OnChange() с задержкой, подождать пока оба операнда не поменяются.
1. И тут главное она должна вызываться только после того как на оба параметра пришло событие OnChange() это могу сделать. 
2. И еще главнее, что вообще не знаю как сделать Событие может прийти только с 1 переменной. И не придет в ближайшие НаноСекунды(такт процессора) со второй, тогда с нее взять старое значение(А это противоречит
 первому условию, но надо как-то выполнить.  
Где-то в коде
 Buf_1.SetReg1(true); // установить значение
//....где-то в другом вообще месте,  в другой итерации, или где-то в середине  очереди, короче выполнится через N - времени
// Buf_1.SetReg2(true); //  тут могло и не быть ничего.
Задержка распространения - Propagation delay Задержка распространения - вот это хочу реализовать.  
https://ru.qaz.wiki/wiki/Propagation_delay
Задержка распространения  вкратце(если кто может решение(алгоритм) без знаний процессора подсказать, это когда 2 сигнала на логическое устройство приходят в разное время(пикоссеунды). И тогда может быть такое, что после того придет 1-ый сигнал, он сложится со вторым(который еще не успел обновиться) откуда пойдут ошибки.