
package main import ( "log" "time" )func main() {sig := make(chan interface{}) go func() {getResult() sig <- struct{}{} }() for { select { case <-sig: log.Println("ok") case <-time.After(time.Second * 3): log.Println("error") } break } } func getResult() {time.Sleep(time.Second * 2) } package main import ( "log" "math/rand" "sync" "time" ) var mutex sync.Mutex var list []int func main() {sig := make(chan interface{}, 100) for i := 0; i < 100; i++ {go insert(sig) } for i := 0; i < 100; i++ {<-sig} for i, v := range list {log.Println(i+1, v) } } func insert(sig chan interface{}) {mutex.Lock() r := rand.New(rand.NewSource(time.Now().UnixNano()))n := r.Intn(100) list = append(list, n) mutex.Unlock()sig <- struct{}{}} 1 teawithlife 2020-05-09 08:07:09 +08:00 现在的公司,出笔试题可以这么随意吗?感觉像作业多些哦 第一个题目还可圈可点,第二个题目为啥规定要用 slice,mutex,不是一个 channel 的事情吗? 第三题就是循环队列,要点就是头尾两个指针和取模操作,处理好边界条件就好了,但是这个“支持添加和删除”太不严谨了 |
2 yngzij OP @teawithlife #1 我当时也问了,为啥必须使用,他说为了考察基础。 |
3 Acoolda 2020-05-09 08:30:19 +08:00 via Android 不能好好贴一下代码吗? |