>>
>> while Gen_Id(LockGen,0) = 1 do
>> begin
>> end;

  ***********************

>> Select Gen_Id(LockGen,1) from rdb$database
>> Тута работаем...
>
>
>    Не пойдёт. Ибо нет гарантии, что Gen_Id(LockGen,1)
> выполнил только один процесс.
>

В смысле может вклинится еще один процесс в промежуток отмеченный *** ?

   Конечно - кто-то же должен уменьшить генератор ;)
Так почему кто-то другой не может его увеличить ?

Вероятность такая есть конечно, спорить не буду. Но я лет пять назад ей пренебрег. Пока не нарывался... :).


   Без блокировок (в том или ином виде) такие задачи не решаются.

Согласен. Про них я в соседнем посте упомянул.


   Не говорю уже о том, что неограниченный по времени спинлок (первый цикл
while) далеко не самое эффективное решение

Не ну можно еще и счетчик прикрутить :)

With b/r. Gleb.

Ответить