Dynamic data race detection for OpenMP programs