City created numerous chances in a mostly one-sided affair completed in heavy rain but the visitors looked set to hold firm and lift themselves off bottom spot.
But City fought on and Barry snatched all three points in injury time when he headed home David Silva's cross. A seventh successive defeat was a touch harsh on Reading, who after slumping 5-2 to Arsenal on Monday were much more resilient.
City could only curse their luck as they carved out several first-half opportunities but failed to take them, with Reading goalkeeper Adam Federici being called on to deny Sergio Aguero and Javi Garcia.
Silva shot wide after a neat one-two with Carlos Tevez and Aguero then teed-up Tevez but Federici saved. The ball rebounded to Tevez but his follow-up was deflected over.
A rare attack from Reading saw Jem Karacan shoot well wide but City responded with Barry, Pablo Zabaleta and Matija Nastasic all trying their luck.
After the restart Tevez shot straight at Federici, who then pushed away the Argentinian's curling free-kick as it headed towards the top corner.
Reading could have snatched a shock lead but Alex Pearce headed wide after winning a clear header from a corner. Edin Dzeko was sent on for Garcia and his free header at a corner after 66 minutes went narrowly over the crossbar.
As the home fans frustrations grew, Reading gained in confidence and Pearce headed another good chance wide from a corner.
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 highest to reach Silva's ball and head firmly past Federici.