В С# это довольно просто:
class Class1{
private static readonly object locker = new object();
void Method1(){
lock(locker) { .... }
}
}
И я определенно не должен делать синхронизацию на this
, потому что это может привести к тупику. Аналогично, в Scala я видел примеры и не мог понять, что является основным принципом синхронизации и объекта (поля), который я должен использовать для создания синхронизации:
#1
def add(user: User) {
// tokenizeName was measured to be the most expensive operation.
val tokens = tokenizeName(user.name)
tokens.foreach { term =>
userMap.synchronized {
add(term, user)
}
}
}
#2
class Person(var name: String) {
def set(changedName: String) {
this.synchronized {
name = changedName
}
}
}
#3 and so on...
Не могли бы вы дать мне понять это?