I wouldn’t normally be so quick to blame the environment but there’s at least one condition signalling bug in latest shipping glibc that was undiscovered for about 4 years.
If you are on glibc, a quick way to verify is to try Ubuntu 16.04, which is before the pthread signalling code was majorly reworked and see if your performance is better.
EDIT: actually, you should go ahead and mention your platform details (including CPU make/model). There’s a surprisingly large number of defects that affect mutexes.