(v interface{})
| 39 | } |
| 40 | |
| 41 | func (s *stack) Push(v interface{}) { |
| 42 | n := node{ |
| 43 | val: unsafe.Pointer(&v), |
| 44 | } |
| 45 | headAddr := (*unsafe.Pointer)(unsafe.Pointer(&s.head)) |
| 46 | for { |
| 47 | head := atomic.LoadPointer(headAddr) |
| 48 | n.nxt = head |
| 49 | if casAddr(headAddr, head, unsafe.Pointer(&n)) { |
| 50 | atomic.AddUint64(&s.count, 1) |
| 51 | return |
| 52 | } |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | func (s *stack) Pop() interface{} { |
| 57 | headAddr := (*unsafe.Pointer)(unsafe.Pointer(&s.head)) |