Number
#0
| URL | https://gw.tape.network/track/9LYnFjejhL5THnpqHmLe33X1jadWvfcPB8Mfx3FQuLKv |
|---|---|
| Tape | 5imk7...kSDmk |
| Owner | 7rPgJ...oKGYs ↗ |
| Content Key | 5afAw...XpPcU |
| Status | ● Ready |
| Type | User |
| Filename | obj-63-5268.go |
| Content-Type | text/plain |
| Encoding | Inline |
| Size | 782 B |
| Spool Group | 8 |
00000000 70 61 63 6b 61 67 65 20 63 6f 75 6e 74 65 72 0a |package counter.|
00000010 0a 69 6d 70 6f 72 74 20 22 73 79 6e 63 22 0a 0a |.import "sync"..|
00000020 2f 2f 20 43 6f 75 6e 74 65 72 20 69 73 20 61 20 |// Counter is a |
00000030 63 6f 6e 63 75 72 72 65 6e 63 79 2d 73 61 66 65 |concurrency-safe|
00000040 20 69 6e 74 65 67 65 72 20 63 6f 75 6e 74 65 72 | integer counter|
00000050 2e 0a 74 79 70 65 20 43 6f 75 6e 74 65 72 20 73 |..type Counter s|
00000060 74 72 75 63 74 20 7b 0a 09 6d 75 20 20 20 20 73 |truct {..mu s|
00000070 79 6e 63 2e 4d 75 74 65 78 0a 09 76 61 6c 75 65 |ync.Mutex..value|
00000080 20 69 6e 74 36 34 0a 7d 0a 0a 2f 2f 20 4e 65 77 | int64.}..// New|
00000090 20 72 65 74 75 72 6e 73 20 61 20 63 6f 75 6e 74 | returns a count|
000000a0 65 72 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 |er initialized t|
000000b0 6f 20 76 61 6c 75 65 2e 0a 66 75 6e 63 20 4e 65 |o value..func Ne|
000000c0 77 28 76 61 6c 75 65 20 69 6e 74 36 34 29 20 2a |w(value int64) *|
000000d0 43 6f 75 6e 74 65 72 20 7b 0a 09 72 65 74 75 72 |Counter {..retur|
000000e0 6e 20 26 43 6f 75 6e 74 65 72 7b 76 61 6c 75 65 |n &Counter{value|
000000f0 3a 20 76 61 6c 75 65 7d 0a 7d 0a 0a 2f 2f 20 49 |: value}.}..// I|
00000100 6e 63 20 69 6e 63 72 65 6d 65 6e 74 73 20 74 68 |nc increments th|
00000110 65 20 63 6f 75 6e 74 65 72 20 62 79 20 31 20 61 |e counter by 1 a|
00000120 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e |nd returns the n|
00000130 65 77 20 76 61 6c 75 65 2e 0a 66 75 6e 63 20 28 |ew value..func (|
00000140 63 20 2a 43 6f 75 6e 74 65 72 29 20 49 6e 63 28 |c *Counter) Inc(|
00000150 29 20 69 6e 74 36 34 20 7b 0a 09 72 65 74 75 72 |) int64 {..retur|
00000160 6e 20 63 2e 41 64 64 28 31 29 0a 7d 0a 0a 2f 2f |n c.Add(1).}..//|
00000170 20 41 64 64 20 61 64 64 73 20 64 65 6c 74 61 20 | Add adds delta |
00000180 74 6f 20 74 68 65 20 63 6f 75 6e 74 65 72 20 61 |to the counter a|
00000190 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e |nd returns the n|
000001a0 65 77 20 76 61 6c 75 65 2e 0a 66 75 6e 63 20 28 |ew value..func (|
000001b0 63 20 2a 43 6f 75 6e 74 65 72 29 20 41 64 64 28 |c *Counter) Add(|
000001c0 64 65 6c 74 61 20 69 6e 74 36 34 29 20 69 6e 74 |delta int64) int|
000001d0 36 34 20 7b 0a 09 63 2e 6d 75 2e 4c 6f 63 6b 28 |64 {..c.mu.Lock(|
000001e0 29 0a 09 64 65 66 65 72 20 63 2e 6d 75 2e 55 6e |)..defer c.mu.Un|
000001f0 6c 6f 63 6b 28 29 0a 0a 09 63 2e 76 61 6c 75 65 |lock()...c.value|
00000200 20 2b 3d 20 64 65 6c 74 61 0a 09 72 65 74 75 72 | += delta..retur|
00000210 6e 20 63 2e 76 61 6c 75 65 0a 7d 0a 0a 2f 2f 20 |n c.value.}..// |
00000220 56 61 6c 75 65 20 72 65 74 75 72 6e 73 20 74 68 |Value returns th|
00000230 65 20 63 75 72 72 65 6e 74 20 63 6f 75 6e 74 65 |e current counte|
00000240 72 20 76 61 6c 75 65 2e 0a 66 75 6e 63 20 28 63 |r value..func (c|
00000250 20 2a 43 6f 75 6e 74 65 72 29 20 56 61 6c 75 65 | *Counter) Value|
00000260 28 29 20 69 6e 74 36 34 20 7b 0a 09 63 2e 6d 75 |() int64 {..c.mu|
00000270 2e 4c 6f 63 6b 28 29 0a 09 64 65 66 65 72 20 63 |.Lock()..defer c|
00000280 2e 6d 75 2e 55 6e 6c 6f 63 6b 28 29 0a 0a 09 72 |.mu.Unlock()...r|
00000290 65 74 75 72 6e 20 63 2e 76 61 6c 75 65 0a 7d 0a |eturn c.value.}.|
000002a0 0a 2f 2f 20 52 65 73 65 74 20 73 65 74 73 20 74 |.// Reset sets t|
000002b0 68 65 20 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e |he counter to 0.|
000002c0 0a 66 75 6e 63 20 28 63 20 2a 43 6f 75 6e 74 65 |.func (c *Counte|
000002d0 72 29 20 52 65 73 65 74 28 29 20 7b 0a 09 63 2e |r) Reset() {..c.|
000002e0 6d 75 2e 4c 6f 63 6b 28 29 0a 09 64 65 66 65 72 |mu.Lock()..defer|
000002f0 20 63 2e 6d 75 2e 55 6e 6c 6f 63 6b 28 29 0a 0a | c.mu.Unlock()..|
00000300 09 63 2e 76 61 6c 75 65 20 3d 20 30 0a 7d |.c.value = 0.}|