Apply .gitignore rules
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
package syncUtil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestNewLocker1(t *testing.T) {
|
||||
count := 1000000
|
||||
succeedCount := 0
|
||||
expected := 1000000
|
||||
goroutineCount := 1
|
||||
|
||||
lockerObj := NewLocker()
|
||||
ch := make(chan bool, goroutineCount)
|
||||
|
||||
for i := 0; i < goroutineCount; i++ {
|
||||
go lockerTest(lockerObj, &succeedCount, count/goroutineCount, ch)
|
||||
}
|
||||
|
||||
for i := 0; i < goroutineCount; i++ {
|
||||
<-ch
|
||||
}
|
||||
|
||||
if succeedCount != expected {
|
||||
t.Errorf("Expected %d, but got %d", expected, succeedCount)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewLocker2(t *testing.T) {
|
||||
count := 1000000
|
||||
succeedCount := 0
|
||||
expected := 1000000
|
||||
goroutineCount := 100
|
||||
|
||||
lockerObj := NewLocker()
|
||||
ch := make(chan bool, goroutineCount)
|
||||
|
||||
for i := 0; i < goroutineCount; i++ {
|
||||
go lockerTest(lockerObj, &succeedCount, count/goroutineCount, ch)
|
||||
}
|
||||
|
||||
for i := 0; i < goroutineCount; i++ {
|
||||
<-ch
|
||||
}
|
||||
|
||||
if succeedCount != expected {
|
||||
t.Errorf("Expected %d, but got %d", expected, succeedCount)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewLocker3(t *testing.T) {
|
||||
count := 1000000
|
||||
succeedCount := 0
|
||||
expected := 1000000
|
||||
goroutineCount := 10000
|
||||
|
||||
lockerObj := NewLocker()
|
||||
ch := make(chan bool, goroutineCount)
|
||||
|
||||
for i := 0; i < goroutineCount; i++ {
|
||||
go lockerTest(lockerObj, &succeedCount, count/goroutineCount, ch)
|
||||
}
|
||||
|
||||
for i := 0; i < goroutineCount; i++ {
|
||||
<-ch
|
||||
}
|
||||
|
||||
if succeedCount != expected {
|
||||
t.Errorf("Expected %d, but got %d", expected, succeedCount)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewLocker4(t *testing.T) {
|
||||
lockerObj := NewLocker()
|
||||
if successful, _, _ := lockerObj.Lock(100); successful == false {
|
||||
t.Errorf("Lock should be successful, but now it fails.")
|
||||
}
|
||||
|
||||
if successful, _, _ := lockerObj.Lock(100); successful {
|
||||
t.Errorf("Lock should be failed, but now it succeeds.")
|
||||
}
|
||||
}
|
||||
|
||||
func lockerTest(lockerObj *Locker, succeedCount *int, count int, ch chan bool) {
|
||||
if success, _, _ := lockerObj.Lock(10000); !success {
|
||||
fmt.Printf("[%v]获取锁超时\n", time.Now())
|
||||
return
|
||||
}
|
||||
defer lockerObj.Unlock()
|
||||
|
||||
for i := 0; i < count; i++ {
|
||||
*succeedCount += 1
|
||||
}
|
||||
|
||||
ch <- true
|
||||
}
|
||||
Reference in New Issue
Block a user