美文网首页
sync.mutex是结构体,值传递

sync.mutex是结构体,值传递

作者: anthonydan | 来源:发表于2020-04-05 18:58 被阅读0次

错误代码,结构体是值传递,将mutex传进去,体现不了效果。

package main

import (
   "fmt"
   "math/rand"
   "sync"
   "time"
)

var count int

var mutex sync.RWMutex

func write(n int, mutex sync.RWMutex) {
   time.Sleep(2 * time.Second)
   rand.Seed(time.Now().UnixNano())
   fmt.Printf("读 goroutine %d 准备写锁...\n", n)
   mutex.Lock()
   fmt.Printf("写 goroutine %d 正在写数据...\n", n)
   time.Sleep(5*time.Second)
   num := rand.Intn(500)
   count = num
   fmt.Printf("写 goroutine %d 写数据结束,写入新值 %d\n", n, num)
   time.Sleep(3 * time.Second)
   mutex.Unlock()

}
func read(n int, mutex sync.RWMutex) {

   fmt.Printf("读 goroutine %d 准备读锁...\n", n)
   mutex.RLock()
   fmt.Printf("读 goroutine %d 正在读取数据...\n", n)
   time.Sleep(20 * time.Second)
   num := count
   fmt.Printf("读 goroutine %d 读取数据结束,读到 %d\n", n, num)
   mutex.RUnlock()
   time.Sleep(5 * time.Second)
}
func main() {
   var mutex sync.RWMutex
   for i := 0; i < 1; i++ {
       go read(i + 1, mutex)
   }
   for i := 0; i < 1; i++ {
       go write(i + 1, mutex)
   }
   time.Sleep(time.Second * 35)
}

相关文章

  • sync.mutex是结构体,值传递

    错误代码,结构体是值传递,将mutex传进去,体现不了效果。

  • Go 面向对象编程

    struct 实例化方式 结构体语法糖 结构体是值类型 结构体 深拷贝和浅拷贝 即值传递和引用传递 匿名结构体 结...

  • C语言结构体指针与结构体变量作形参的区别

    区别 结构体变量 结构体变量作为形参,传递的是结构体变量本身,是一种值传递 形参结构体变量成员值的改变不影响对应的...

  • (实验)Swift 值和引用

    元组 输出 可见元组赋值是值类型传递 结构体 输出 结构体赋值是值类型传递 类 数组 输出 可见数组赋值是值类型传...

  • Go语言学习教程(十一)

    一、结构体指针 * 由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用时结构体指针完成 * 可以结合ne...

  • Swift中的Array值传递问题

    Array是个结构体,就是值类型,值类型传递传递的是值,修改传递过去的值不会改变原来的值当Array传递的时候里面...

  • C语言day09-18结构体和函数

    pragma mark 结构体和函数 pragma mark 概念 /**结构体之间赋值 是 值传递, 相当于拷贝...

  • Structures vs Classes

    Structures 结构体 结构体是值类型。每次将其值传递给变量、常量或函数时,都会为其分配一个副本。 Swif...

  • C语言的结构体(篇章之二)

    结构体与函数 一、结构体作为函数的参数 【一】、传值调用方式在函数之间直接传递结构体类型的数据——传值调用方式。当...

  • 数组,切片

    值传递:数组,结构体指针(地址)传递:切片,结构体方法 数组 1.元素交换 切片 内存扩容,在内存大小小于1024...

网友评论

      本文标题:sync.mutex是结构体,值传递

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