честно говоря от ets:update_elem я ожидаю меньшего оверхеда чем gen_server:call. оригинальная идея была в том, что ходить в блокирующем виде только когда мы переключаемся из read в write
ты лучше думай о рейс кондишнах, чем о мифических тормозах =)
А можно и генсервер, но в lock вызове надо будет мутить что то типа lock(State, From, Pid) -> gen_server:reply(From, locked), link(Pid) %или monitor receive unlock -> {noreply, State}; {'DOWN', _,_,_} -> {noreply, State} ...