If they’re the same length then you just need to tell the game to play both on the same frame time in game no? So long as they get the instruction on the same frame they should start at the same time and in sync.
You can set up a function to do so in C++ like so:
USkeletalMeshComponent* RiderSkeletalmesh, HorseSkeletalmesh;
UAnimationAsset* Rideanimation, Horseanimation;
void PlaySyncedAnimation()
{
RiderSkeletalmesh -> SetAnimation(Rideanimation);
RiderSkeletalmesh->Play(bLooping);
HorseSkeletalmesh -> SetAnimation(Horseanimation);
HorseSkeletalmesh->Play(bLooping);
}
It gets a little more nuanced if you are using an anim BP to control other animations for your character, but that should be it.