Boa tarde Giordano, assim como o Felipe indicou, você terá de utilizar do Begin Sequence/End Sequence, porém esse tratamento não segura todas as exceções, mesmo com tal tratamento, existem exceções que o binário aborta a thread, portanto não é um método 100% eficaz.
Acredito que seu controle de lock, semáforo e tratamento de exceção possa ser resolvido pela função LockByName:
http://tdn.totvs.com/pages/releaseview.action?pageId=6814894
Muito cuidado ao utilizar a função SysErrorBlock, você pode remover o tratamento de erro default do Protheus e as consequências são diversas.