
Compiler changes: * Change map assignment to use mapassign and assign value directly. * Change string iteration to use decoderune, faster for ASCII strings. * Change makeslice to take int, and use makeslice64 for larger values. * Add new noverflow field to hmap struct used for maps. Unresolved problems, to be fixed later: * Commented out test in go/types/sizes_test.go that doesn't compile. * Commented out reflect.TestStructOf test for padding after zero-sized field. Reviewed-on: https://go-review.googlesource.com/35231 gotools/: Updates for Go 1.8rc1. * Makefile.am (go_cmd_go_files): Add bug.go. (s-zdefaultcc): Write defaultPkgConfig. * Makefile.in: Rebuild. From-SVN: r244456
77 lines
1.3 KiB
Go
77 lines
1.3 KiB
Go
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import "runtime"
|
|
|
|
func init() {
|
|
register("concurrentMapWrites", concurrentMapWrites)
|
|
register("concurrentMapReadWrite", concurrentMapReadWrite)
|
|
register("concurrentMapIterateWrite", concurrentMapIterateWrite)
|
|
}
|
|
|
|
func concurrentMapWrites() {
|
|
m := map[int]int{}
|
|
c := make(chan struct{})
|
|
go func() {
|
|
for i := 0; i < 10000; i++ {
|
|
m[5] = 0
|
|
runtime.Gosched()
|
|
}
|
|
c <- struct{}{}
|
|
}()
|
|
go func() {
|
|
for i := 0; i < 10000; i++ {
|
|
m[6] = 0
|
|
runtime.Gosched()
|
|
}
|
|
c <- struct{}{}
|
|
}()
|
|
<-c
|
|
<-c
|
|
}
|
|
|
|
func concurrentMapReadWrite() {
|
|
m := map[int]int{}
|
|
c := make(chan struct{})
|
|
go func() {
|
|
for i := 0; i < 10000; i++ {
|
|
m[5] = 0
|
|
runtime.Gosched()
|
|
}
|
|
c <- struct{}{}
|
|
}()
|
|
go func() {
|
|
for i := 0; i < 10000; i++ {
|
|
_ = m[6]
|
|
runtime.Gosched()
|
|
}
|
|
c <- struct{}{}
|
|
}()
|
|
<-c
|
|
<-c
|
|
}
|
|
|
|
func concurrentMapIterateWrite() {
|
|
m := map[int]int{}
|
|
c := make(chan struct{})
|
|
go func() {
|
|
for i := 0; i < 10000; i++ {
|
|
m[5] = 0
|
|
runtime.Gosched()
|
|
}
|
|
c <- struct{}{}
|
|
}()
|
|
go func() {
|
|
for i := 0; i < 10000; i++ {
|
|
for range m {
|
|
}
|
|
runtime.Gosched()
|
|
}
|
|
c <- struct{}{}
|
|
}()
|
|
<-c
|
|
<-c
|
|
}
|