Traffic light controlled intersection

In the C++ code solution:

{
        {
            // Locking the mutex to ensure exclusive access to the shared variable currentRoadId
            std::lock_guard<std::mutex> lock(mtx);

            // Check if the road that the car wants to use does not have green light
            if (roadId != currentRoadId) {
                turnGreen();             // Turn the light green for the current road
                currentRoadId = roadId;  // Update the current road ID to the car's road ID
            }
        } // Mutex is released automatically when lock goes out of scope

        // Allow the car to cross the intersection
        crossCar();
    }

The car is allowed to cross the intersection in the absence of a lock guard. Does this not make the TrafficLight class possibly allow a second car from turning the light green for a different road while the first car is still crossing the intersection.