测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package main
 
import (
    "errors"
    "fmt"
    "sync"
    "time"
)
 
type Element struct {
    V    int
    Pre  *Element
    Next *Element
}
 
type List struct {
    Len  int
    Head *Element
    Tail *Element
    m    sync.RWMutex
}
 
func (l *List) Push(v int) {
    l.m.Lock()
    defer l.m.Unlock()
    e := &Element{V: v}
    if l.Head == nil {
        l.Head = e
    } else {
        l.Tail.Next = e
        e.Pre = l.Tail
 
    }
    l.Tail = e
    l.Len = l.Len + 1
}
 
var errEmpty = errors.New("空了!")
 
func (l *List) Pop() (v int, err error) {
    l.m.Lock()
    defer l.m.Unlock()
 
    if l.Tail == nil {
        err = errEmpty
    } else {
        v = l.Tail.V
        l.Tail = l.Tail.Pre
        if l.Tail == nil {
            l.Head = nil
        }
        l.Len = l.Len - 1
    }
    return v, err
}
func main() {
 
    list := new(List)
    /*  for i := 0; i < 10; i++ {
            list.Push(i)
        }
    */
    go list.Push(1)
    go list.Push(2)
    go list.Push(3)
    go list.Push(4)
    go list.Push(5)
 
    time.Sleep(time.Second * 2)
    fmt.Println("qian:", list)
 
    for v, err := list.Pop(); err == nil; v, err = list.Pop() {
        fmt.Printf("%v\n", v)
    }
    fmt.Println("hou:", list)
 
}

 

posted on   西红柿西瓜  阅读(70)  评论(0编辑  收藏  举报

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示