The main thing is to use a combination of table hints, as shown below, as part of the transaction.
DECLARE @NextId INTEGER
BEGIN TRANSACTION
SELECT TOP 1 @NextId = ID
FROM QueueTable WITH (UPDLOCK, ROWLOCK, READPAST)
WHERE BeingProcessed = 0
ORDER BY ID ASC
IF (@NextId IS NOT NULL)
BEGIN
UPDATE QueueTable
SET BeingProcessed = 1
WHERE ID = @NextID
END
COMMIT TRANSACTION
IF (@NextId IS NOT NULL)
SELECT * FROM QueueTable WHERE ID = @NextId
UPDLOCK , , .
ROWLOCK , ( , , , , , ).
READPAST , .