Окей, на языке состояний это действительно проще описывать: по факту ведь есть два "состояния", которые стоит (почему - дальше) различать: базу кто-то пытается удалить и в базу кто-то пытается писать. Так как удаляется она лишь однажды (а вот пишут в неё частенько), то как раз таки несколько оверкилльно в этой ситуации сначала каждый раз брать блок на чтение (что частенько будет а) - долго б) - заставлять ждать потоки, которые собираются писать), потом делать все необходимые проверки (которые не требуют непосредственно чтения из датабазы - только лишь того, что её до сих пор не стёрли), а только потом чтение. Так вот aliveLock я беру как раз таки в этих случаях. Так как его на запись могут взять всего один раз за всю жизнь таблицы (и убить её этим), то в 99.9% случаев он будет брать его мнгновенно. А вот потом уже, когда нужен непосредственный доступ к данным - стоит взять более "дорогой" лок на чтение.