A melhor alternativa é usar um trigger + generator, pois o próprio sgbd trata as transaçõe simultâneas. Um generator no BD está em um outro contexto transacional, logo uma alteração no mesmo é visível imediatamente por todas as transações (ainda que abertas). =)