共享内存并发机制
竞态条件
func TestCounter ( t * testing. T) {
counter := 0
for i:= 0 ; i< 5000 ; i++ {
go func ( ) {
counter++
} ( )
}
time. Sleep ( 1 * time. Second)
t. Logf ( "counter = %d" , counter)
}
Lock
可以使用package sync中的Mutex- > RWLock
func TestCounterThreadSafe ( t * testing. T) {
var mut sync. Mutex
counter := 0
for i:= 0 ; i< 5000 ; i++ {
go func ( ) {
defer func ( ) {
mut. Unlock ( )
} ( )
mut. Lock ( )
counter++
} ( )
}
time. Sleep ( 1 * time. Second)
t. Logf ( "counter = %d" , counter)
}
通道
等待组
func TestWaitGroup ( t * testing. T) {
var wg sync. WaitGroup
for i:= 0 ; i< 5000 ; i++ {
wg. Add ( 1 )
go func ( ) {
defer func ( ) {
wg. Done ( )
} ( )
} ( )
}
wg. Wait ( )
}
Lock
func TestCounterThreadSafe ( t * testing. T) {
var mut sync. Mutex
counter := 0
for i:= 0 ; i< 5000 ; i++ {
go func ( ) {
defer func ( ) {
mut. Unlock ( )
} ( )
mut. Lock ( )
counter++
} ( )
}
time. Sleep ( 1 * time. Second)
t. Logf ( "counter = %d" , counter)
}