The league leaders and Atletico have 82 points, with Barca top because of a superior head-to-head record. Real are third on 81 points with three games remaining
Luis Suarez became the first La Liga player to score four goals for the second game in a row as Barcelona, helped by three penalties in the second half, stayed top by hammering Sporting Gijon 6-0 on Saturday.
Elsewhere, Gareth Bale made up for the absence of Cristiano Ronaldo by scoring twice as Real Madrid came back from two goals down to win 3-2 at Rayo Vallecano while Atletico Madrid kept up their title hopes with a 1-0 home victory over Malaga.
Atletico coach Diego Simeone could be facing a three-game touchline ban after being sent off at halftime when a ball was thrown on to the pitch from the technical area.
Suarez moved ahead of Ronaldo as the league's top scorer on 34 goals after netting four times, twice with penalties, in the space of 25 second-half minutes.
Sporting had defender Ognjen Vranjes sent off in the 85th minute after picking up a second booking for fouling Neymar who scored the subsequent spot kick
The league leaders and Atletico have 82 points, with Barca top because of a superior head-to-head record. Real are third on 81 points with three games remaining.
Lionel Messi's stooping header put Barca ahead on 12 minutes but Gijon, who are third from bottom, missed two chances to equalise before halftime.
Suarez eased Barca nerves by tapping home Andres Iniesta's low cross in the 63rd minute before converting twice from the spot.
The prolific Uruguayan, who also scored four times and provided three assists in Wednesday’s 8-0 thrashing of Deportivo La Coruna, grabbed another goal in the 88th minute, drilling in a pass from Messi.
Barca have now scored 14 goals in their last two league games after picking up just one point from their previous four matches.
"It was vital we won and doing it by scoring lots of goals helps lift our confidence," said coach Luis Enrique. "We have turned round a very negative run that nobody expected."
Ronaldo missed his first league game of the season due to a muscle strain and Real suffered another blow ahead of their Champions League semi-final against Manchester City in midweek when Karim Benzema was injured against Rayo.
Real were 2-0 down inside 14 minutes after Adrian Embarba scored from close range and Venezuelan striker Miku pounced on more poor defending from the visitors.
Bale started the revival, heading in a 35th-minute corner before Zinedine Zidane's side drew level six minutes after the break through substitute Lucas Vazquez.
Welshman Bale netted again nine minutes from time, collecting a misplaced pass from a Rayo defender before powering the ball past goalkeeper Juan Carlos.
"I'm very happy with him and he's very happy at being able to make the difference," Real coach Zidane told a news conference. "He's a spectacular footballer and he demonstrated that today."
Rayo took a surprise early lead when Embarba converted former Manchester United player Bebe's low cross from six metres, and a weak header from Raphael Varane allowed Miku to make it 2-0.
Bale's header lifted Real and they drew level through substitute Vazquez who had replaced Benzema.
The Wales forward had the final say, intercepting the ball and racing into the box down the left to strike the winner.
Substitute Angel Correa settled a difficult game for Atletico against Malaga soon after coming off the bench, as his shot from the edge of the area was deflected into the far corner in the 62nd minute.
Simeone said a ball boy lobbed the ball on to the pitch, leading to the coach being forced to watch the second half from the stands.
"It was the boy who was beside us but it doesn't change anything," said the coach. "It's clear the referee took the correct decision as stated by the rules."