The Briton posted the third fastest time of the fifth event of the omnium, the flying lap, with New Zealand’s Dylan Kennett taking a second consecutive event victory after winning the kilometre time trial earlier in the day.
The riders set out in reverse overall order for the their respective flying laps, with Cavendish, Viviani and defending champion Lasse Norman Hansen (Denmark) all doing enough to maintain or improve their standings heading into the points race.
The biggest loser of the main contenders was young Colombian hopeful Fernando Gaviria, who posted the 10th quickest time and fell to seventh place, 38 points behind Viviani who tops the table on 178.
Second placed Thomas Boudat (Fra) also lost out after posting the ninth quickest time and fell down to fifth overall.
There’s still hope for the likes of Gaviria however, with a huge amount of points available in the event’s finale, the points race, which will take place later today at 21-23 UK time.
2016 Olympic Games, Men’s Omnium, Flying Lap
1. Dylan Kennett (NZL) 12.506
2. Elia Viviani (ITA) 12.660
3. Mark Cavendish (GBR) 12.793
4. Lasse Norman Hansen (DEN) 12.832
5. Gael Suter (SUI) 12.981
6. Glenn O’Shea (AUS) 13.053
7. Tim Veldt (NED) 13.170
8. Leung Chun Wing (HKG) 13.265
9. Thomas Boudat (FRA) 13.272
10. Fernando Gaviria (COL) 13.273
11. Roger Kluge (GER) 13.332
12. Bobby Lea (USA) 13.416
13. Artyom Zakharov (KAZ) 13.446
14. Sanghoon Park (KOR) 13.489
15. Gideoni Monteiro (BRA) 13.569
16. Kazushige Kuboki (JPN) 13,587
17. Prado Ignacio (MEX) 14.046
Overall standings after five events
1. Elia Viviani (ITA) 178
2. Mark Cavendish (GBR) 162
3. Lasse Norman Hansen (DEN) 152
4. Dylan Kennett (NZL) 150
5. Thomas Boudat (FRA) 150
6. Glenn O’Shea (AUS) 144
7. Fernando Gaviria (COL) 140
8. Roger Kluge (GER) 134
9. Artyom Zakharov (KAZ) 104
10. Tim Veldt (NED) 104