美文网首页
协程中并发问题

协程中并发问题

作者: sunny635533 | 来源:发表于2023-02-07 11:53 被阅读0次

参考网址:https://www.cnblogs.com/joy99/p/15805916.html
怎么保证同一个变量,在不同线程中,保持它的可见性和原子性?
只用Volatile,打印出来的count并不是100000;然后用如下几种方式,能解决:
1、用AtomicInteger和incrementAndGet()
2、用synchronized
val obj = Any();
synchronized(obj){
count++
}
3、ReentrantLock,
val mLock = ReentrantLock()
mLock.lock()
try {
count++
}finally {
mLock.unlock()
}
4、协程中的Mutex,类似ReentrantLock,
val mutex = Mutex()
mutex.withLock {
count++
}

示例代码:

class TestClass{
//    @Volatile
//    var count = 0

//    var count = AtomicInteger()

//    val obj = Any()
//    val mLock = ReentrantLock()
    val mutex = Mutex()
    var count = 0;

   suspend fun test() = withContext(Dispatchers.IO) {
        repeat(100) {
            launch {
                repeat(1000) {
//                    count++
//                    count.incrementAndGet()
//                    synchronized(obj){
//                        count++
//                    }
//                    mLock.lock()
//                   try {
//                       count++
//                   }finally {
//                       mLock.unlock()
//                   }
                    mutex.withLock {
                        count++
                    }
                }
            }
        }
        launch {
            delay(3000)
            println("end count: $count")
        }
    }
}

fun main(argv: Array<String>){
    println("==== main start ====")
runBlocking {
 TestClass().test()
}
println("==== main end ====")
}

打印结果如下:


image.png

相关文章

  • 关于协程开发

    协程: 1.什么是协程 协程,经常被称为微线程,纤程,是一种多任务并发的操作手段定义:协程是运行在单线程中的并发程...

  • Go 并发编程:Goroutine常见应用范式

    一、多独立协程并发——worker分工模式 并发协程独立运行且互不通信,主协程等待处理独立子协程的结果 并发编程有...

  • 协程中并发问题

    参考网址:https://www.cnblogs.com/joy99/p/15805916.html[https:...

  • 第六天

    一、并发编程 并发与并行(并发时间片轮询)资源竞争 1、goruntine协程 主协程退出了其他协程也跟着退出 主...

  • Kotlin协程(1)协程介绍

      协程与线程类似,都可以处理并发任务。协程在很多语言中都支持,但 Java 中并没有协程,而 kotlin 中是...

  • Go Goroutine

    协程并发 Go并发 什么是goroutine

  • 【Go 精选】并发编程实战 - 协程

    1.协程的概念 Go 应用程序并发处理的部分被称作 goroutines(协程),可以进行更有效的并发运算。协程是...

  • Kotlin 并发编程之"协程"

    Kotlin 并发编程之"协程" Kotlin协程简介 Kotlin, as a language, provid...

  • GO学习笔记(18) - 并发编程(1) - 理解gorouti

    目录 进程、线程与协程 并发模模型介绍 GO并发编程介绍 进程、线程与协程 进程和线程 进程是程序在操作系统中的一...

  • 协程技术

    1、协程(Coroutine):比线程的单位更小,在一个线程中可以开启多个协程,利用多个协程实现并发。 2、协程跟...

网友评论

      本文标题:协程中并发问题

      本文链接:https://www.haomeiwen.com/subject/xvnxkdtx.html