The Etihad Stadium clash looked to be heading for a surprise goalless draw on Saturday after the visiting Royals put in a diligent defensive display to hold off the hosts, but a dramatic finale saw Roberto Mancini’s men make the breakthrough.
Barry drove home a curling David Silva ball from close range to hand the defending Premier League champions the win, cutting Manchester United’s lead at the top of the table to three points ahead of their trip to Swansea on Sunday.
For Brian McDermott’s side it marked a seventh consecutive defeat which means they remain rock bottom of the standings.
It took less than two minutes for Adrian Mariappa to collect the game’s first booking as he clattered into Carlos Tevez in an early attempt to impose himself.
Thereafter the visitors spent most of the rest of the first half on the back foot, with Mariappa and Alex Pearce particularly working hard to repel attack after attack.
The hosts were so dominant that 18-year-old Karim Rekik, making his Premier League debut at left-back in the absence of Gael Clichy and Aleksandar Kolarov, was able to get through mostly untested.
Tevez played in strike partner Sergio Aguero for City’s first serious opportunity but Adam Federici rushed out to claim.
Aguero made another good run to reach the byline but his cross evaded everybody before Javi Garcia planted a firm header straight at Federici, then Silva played a neat one-two with Tevez but shot wide and Aguero then teed up Tevez but Federici saved. The ball rebounded to Tevez but his follow-up was deflected over.
The first half ended goalless despite City’s numerous efforts and the second started in the same vein as Tevez threatened after the restart but could only shoot at Federici. He tried his luck again from a free-kick outside the area but his curling effort was pushed away from the top corner by the Reading keeper.
The Royals could have snatched a shock lead when Pearce got forward to win a clear header from a Ian Harte corner but his effort was well wide.
City boss Mancini decided it was time for change and sent on Edin Dzeko for the mostly ineffective Garcia, with the Bosnian getting quickly into the action and millimetres away from connecting with a header after good work by Pablo Zabaleta.
As the game moved into four minutes of injury time, City launched a final push. Aguero fired into the side-netting but Barry came good as he jumped above the defence to reach Silva’s ball and head firmly past Federici.