Блокировка и блокировки предназначены для синхронизации, чтобы предотвратить повреждение данных, когда несколько потоков хотят записывать в одну и ту же память.
Обычно вы запускаете несколько потоков и используете блокировку только в критических ситуациях. Если два или более потока хотят писать в одно и то же место в одно и то же время, то многоядерные вычисления ограничены. Конечно, в этой ситуации вы можете не использовать блокировку, но результаты могут быть непредсказуемыми в этот момент.
Например, чтобы написать многопоточное вычисление умножения матриц, вы создаете поток для каждой строки результирующей матрицы. Блокировка не требуется, потому что каждый поток записывает в другое место, и этот сценарий может в полной мере использовать несколько процессоров.
Если вы хотите разрешить более одного общего доступа к ресурсу, вы можете использовать Semaphore (в java).