QH
Size: a a a
QH
AM
synchronized
свитчнется корутина, она совершенно спокойно может продолжиться на другом потоке. В итоге вы не просто не получите ничего хорошего от того, что вы попытались синхронизировать потоки, вы ещё и дедлок поймаете.NK
synchronized
свитчнется корутина, она совершенно спокойно может продолжиться на другом потоке. В итоге вы не просто не получите ничего хорошего от того, что вы попытались синхронизировать потоки, вы ещё и дедлок поймаете.NK
NK
synchronized
свитчнется корутина, она совершенно спокойно может продолжиться на другом потоке. В итоге вы не просто не получите ничего хорошего от того, что вы попытались синхронизировать потоки, вы ещё и дедлок поймаете.NK
NK
var d: Deferred
if (ref.get().also { d = it } == null && ref.cas(null, Deferred().also { d = it })) {
запускаем задачу, которая присвоит внутрь d
} else {
return d.await()
}
AM
get()
происходит, потому в общем случае предостерегаю от потенциальных проблем. Если вы хорошо понимаете, какие последствия можете получить, и чётко следите за тем, чтобы не провалиться в дедлок -- на здоровье. Только сопровождайте, пожалуйста, такие изыскания предупреждениями, чтобы другие люди, не зная вашего контекста, не повторяли такое дома :)RM
AM
NK
NK
var d: Deferred
if (ref.get().also { d = it } == null && ref.cas(null, Deferred().also { d = it })) {
запускаем задачу, которая присвоит внутрь d
} else {
return d.await()
}
QH
RM
NK
AM
NK
AO
NK
AN