标签:defer import select pack str 操作 def port 有一个
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个协程同时对一个对象指针变量进行读操作的时候需要进行加锁
那么不加有什么问题呢:
会出现打印出只有一个变量的情况
标签:defer import select pack str 操作 def port 有一个
原文地址:http://www.cnblogs.com/chesscode/p/7492169.html