Du kan implementera ett "avbryt-liknande" beteende på detta sätt:
Du kör frågan på en separat tråd, som fortsätter att köras oavsett om timeout inträffar eller inte. Timeout inträffar på huvudtråden och ställer in en variabel till "1" som markerar att den inträffade. Sedan gör du vad du vill på din huvudtråd.
Frågetråden, när frågan är klar, kontrollerar om timeout har inträffat. Om den inte har gjort det, gör den resten av arbetet den behöver göra. Om den HAR, låser den bara upp borden den just låste.
Jag vet att det låter lite slösaktigt, men upplåsningsperioden bör i princip vara omedelbar och du kommer så nära det resultat du vill ha som möjligt.