35 lines
		
	
	
		
			554 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			554 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package lockkey
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
func TestLock(t *testing.T) {
 | 
						|
	lk := NewLockByKey()
 | 
						|
 | 
						|
	// Lock and unlock the same key multiple times.
 | 
						|
	for i := 0; i < 5; i++ {
 | 
						|
		go func() {
 | 
						|
			lk.Lock("key")
 | 
						|
			fmt.Println("locked")
 | 
						|
			lk.Unlock("key")
 | 
						|
			fmt.Println("unlocked")
 | 
						|
		}()
 | 
						|
	}
 | 
						|
 | 
						|
	// Lock and unlock different keys.
 | 
						|
	lk.Lock("key1")
 | 
						|
	fmt.Println("locked key1")
 | 
						|
	lk.Unlock("key1")
 | 
						|
	fmt.Println("unlocked key1")
 | 
						|
 | 
						|
	lk.Lock("key2")
 | 
						|
	fmt.Println("locked key2")
 | 
						|
	lk.Unlock("key2")
 | 
						|
	fmt.Println("unlocked key2")
 | 
						|
 | 
						|
	time.Sleep(3 * time.Second)
 | 
						|
}
 |