i<10;i++ {
time.Sleep(1)
fmt.Println(name+": "+strconv.Itoa(i))
}
}
输出:
要注意的是,GMP模型下...,协程一定是并发的,但不一定是并行的
看代码可以看到,我额外加了一个sleep,那是因为main协程如果结束运行了,子协程也会直接结束,sleep等待子协程执行一会儿,这样才能打印出数据
这个实现方案显然不太好...,如何实现go的变量协程安全呢?...rwmutex基于 mutex实现,多个协程可以重复获取读锁,如果获取写锁,其他协程读锁也将阻塞,这个读写锁太简单了,不说了
sync.Once 只执行一次
当在高并发情况下时,我们可能需要保证一个函数只执行一次...针对基本数据类型我们还可以使用原子操作来保证并发安全
协程安全的变量类型有sync.map,atomic包等
太简单了,不讲了
本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20