Java предоставляет очень удобную идиому для синхронизации критических участков кода:Что такое golang-эквивалент Java synchronized() block?
synchronized(someObject) {
// do something really important all by myself with nobody bothering me
}
Или
public synchronized void doSomething() {
// ...
}
Что такое идти эквивалент?
(Быстрый поиск показывает: golang.org/pkg/sync/ - который, кажется (возможно я ошибаюсь) слишком низкий уровень для общего пользования.)
(пример того, почему я забочусь об этом: мне нужно отправить сообщение для нескольких слушателей по каналам. Каналы обеспечивают хороший канал для данных без необходимости синхронизации, но когда каналы добавляются или удаляются, мне нужно изменить список каналов, которые могут произойти в любое время, должны иметь дело с параллелизмом.)
Семантика не то же самое. Синхронизированные блоки Java обеспечивают блокировки повторного входа. –
Да, вы правы @ Анонимно, но 'Go' не имеет' java-like 'класса наследования, поэтому я считаю, что нет необходимости в« реентерабельных блокировках »в' Go'. – tarrsalah
http://play.golang.org/p/jfeBxkve65 будет работать на Java, но тупики в Go. Наследование не играет роли. –