package main

import (
"fmt"
"sync"
) var l sync.Mutex
var a string func f() {
a = "hello, world"
l.Unlock()
} //还是需要加锁的!!!
type testClass struct {
mutex sync.Mutex
x []byte
} func (this *testClass) init() {
this.x = make([]byte, 0)
} func (this *testClass) addx(val byte) {
this.mutex.Lock()
defer this.mutex.Unlock()
this.x = append(this.x, val)
} func (this *testClass) print() {
fmt.Println(this.x)
} var x1 chan int var x2 chan int func f1(txtcls *testClass) {
txtcls.addx('x')
x1 <- 1
} func f2(txtcls *testClass) {
txtcls.addx('y')
x2 <- 1
} func main() {
x1 = make(chan int)
x2 = make(chan int)
var txtcls testClass
txtcls.init() go f1(&txtcls) go f2(&txtcls) select {
case <-x1:
fmt.Println("xxxxx")
} select {
case <-x2:
fmt.Println("yyyyy")
} txtcls.print() /*
l.Lock()
go f()
l.Lock()
print(a)
l.Unlock()
*/
}

  以上代码说明如下问题,2个协程同时对一个对象指针变量进行读操作的时候需要进行加锁

那么不加有什么问题呢:

会出现打印出只有一个变量的情况

泊爷带你学go -- 加锁的问题的更多相关文章

  1. 泊爷带你学go -- 经典的继承与接口 简直吊炸天 !

    package main import ( "fmt" ) type TeamBase struct { m_TeamId uint64 m_Rid uint32 m_RoomRu ...

  2. 泊爷带你学go -- 反射的经典玩法

    package main import ( "fmt" "reflect" ) type order struct { ordId int customerId ...

  3. 泊爷带你学go -- redis连接池的操作

    package main import ( "common" "fmt" "proto" "strconv" " ...

  4. 我要带徒弟学写JAVA架构,引路架构师之路(Jeecg开源社区)

    带徒弟学JAVA架构(Jeecg社区)      Java程序员如何打破工作2,3年的瓶颈问题,如何更上一层楼?      太多的巧合,让我接触到了开源,通过JEECG与很多朋友交流后,让我有了帮助别 ...

  5. 【凯子哥带你学Framework】Activity界面显示全解析(下)

    咱们接着上篇继续讲,上篇没看的请戳:[凯子哥带你学Framework]Activity界面显示全解析(上) 如何验证上一个问题 首先,说明一下运行条件: //主题 name="AppThem ...

  6. 带你学C带你飞!

    C语言免费课程推荐:带你学C带你飞! 想学习C语言,首先就要了解什么是C语言: C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码 ...

  7. 老段带你学鸟哥Linux视频教程 包含基础班+提高班

    老段带你学鸟哥Linux视频教程 包含基础班+提高班,附带pdf文档. 目录结构如下: 目录:/-老段带你学鸟哥Linux视频教程 [.9G] ┣━━老段带你学鸟哥-服务器篇 [1009.4M] ┃ ...

  8. 手摸手带你学移动端WEB开发

    HTML常用标签总结 手摸手带你学CSS HTML5与CSS3知识点总结 手摸手带你学移动端WEB开发 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/Ro ...

  9. 手摸手带你学CSS

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star HTML常用标签总结 前言 在大一的时候,上过网页设计的课 ...

随机推荐

  1. redis -memcahe

    tomcat自动化集成 https://blog.51cto.com/ellenv/1932817 Redis与Memcache对比:1.Memcache是一个分布式的内存对象缓存系统而redis是可 ...

  2. Robin Hood CodeForces - 672D (二分)

    大意: 给定数组$a$, 每次操作使最大元素减小1最小元素增大1, 求k次操作后最大值与最小值的差. 二分出k次操作后最大值的最小值以及最小值的最大值, 若和能平分答案即为$max(0,R-L)$, ...

  3. 【数据结构】运输计划 NOIP2015提高组D2T3

    [数据结构]运输计划 NOIP2015提高组D2T3 >>>>题目 [题目描述] 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航 ...

  4. laravel清缓存,flex简单使用

    关于laravel 删除视图缓存:php artisan view:clear 清除运行缓存:php artisan cache:clear 清除配置缓存:php artisan config:cle ...

  5. EF Core 生成数据库

       1.运行cmd,切换到打开项目所在文件夹,输入下面的命令 dotnet ef migrations add Initial 建立并初始化数据库 dotnet ef database update ...

  6. mock js使用方法简单记录

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. mysql innodb 唯一键里的字段为什么不能为NULL

    mysql 唯一键失效 CREATE TABLE `studnet_unique` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100 ...

  8. learning makefile string example

  9. mysql存储过程和执行计划案例

    开启event_scheduler指令: SET GLOBAL event_scheduler = ON;SET @@global.event_scheduler = ON;SET GLOBAL ev ...

  10. WEEK1

    #变量 var1: name = input('name:') age = input('age:) job = input('job:) salary = input('salary:) info ...