>>
>> 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.