multithreading - 协程可以挂起然后在不同的线程上恢复吗?第一个线程的内存效应是否会传递到第二个线程?

标签 multithreading kotlin kotlin-coroutines

考虑

fun main(args: Array<String>) {
    runBlocking {
        launch(Dispatchers.Default) {
            var a = 0
            a++
            delay(100)
            println(a)
        }
    }
}

由于Dispatcher有多个线程,程序是否可以在挂起时改变线程delay功能?是否保证它会打印“1”或 a需要AtomicInteger

最佳答案

执行挂起延迟()函数后,协程可能会继续在Dispatchers.Default线程池中的另一个线程上执行。

不需要对a变量进行额外的同步,因为它仅在一个协程中使用,协程中的代码按顺序执行,提供发生之前的保证。如果该变量在几个协程中使用,则需要额外的同步。

关于multithreading - 协程可以挂起然后在不同的线程上恢复吗?第一个线程的内存效应是否会传递到第二个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72834086/

相关文章:

c++ - "mutex"和 "lock"有什么区别?

c# - 当我使用线程将内容打印到控制台时,为什么会产生奇怪的结果?

c# - .NET (4.0 - C#) 的可靠加密日志记录?

java - 每个线程或每个方法调用的堆栈?

android - 协程主体未涵盖在单元测试代码覆盖范围内 - Android Studio

android - android按钮和监听器。我怎样才能使它更短

java - 当响应具有 HTTP 错误状态代码时,为什么我会得到 `Only one connection receive subscriber allowed`?

kotlin - 将可空类型转换为其不可空类型?

Kotlin - 带循环的协程

android - 即使没有 "suspend"关键字,Kotlin 协程为什么以及如何防止线程阻塞?