I guess it could happen because each contact update triggers search index update. Anytime system attempts to update index for next contact update (in terms of index) of previous contact may not be completed yet, so index remains locked.
According to documentation you might want to disable automatic index update, but using scheduled task. You'll need to add following setting to web.config file
<add key="CMSProcessSearchTasksByScheduler" value="true" />