То что вы используете sync ничего не говорит - будьте конкретнее, в sync много функций/объектов.
Очередность, возможно, что совпадет, но совсем не гарантируется, если вы ее сами не организуете в явном виде.
Да, все блокированы и ждут, пока одна читает/пишет, если вы используете sync.Mutex.
Вообще при чтении блокировать не нужно. Используйте специальный sync.RWMutex.
Блокировать нужно на очень малое количество операций.
Если операций много/сложные, то используйте не sync, а каналы.
Еще можете прочитать использовать lock-free алгоритмы, для этого вам понадобится пакет atomic.