il primo problema l'ho risolto... il lock non serve per bloccare nulla... ma per dare una precenza ad una risorso condivisa nel momento in cui viene utilizzata da due thread differenti, no?

Ora il secondo esempio utilizza "male" la queue per dare delle bloccare/unbloccare... volevo sapere come potrei fare una cosa simile in maniera elegante e più intelligente (la mia è palese sia fatta male, persino da me che non conosco i thread)