I monitor e i semafori sono due meccanismi di sincronizzazione utilizzati nella programmazione concorrente, e sono strettamente correlati perché entrambi servono a gestire l'accesso a risorse condivise tra thread o processi. Tuttavia, hanno approcci e livelli di astrazione diversi.