摘要: golang中有2种方式同步程序,一种使用channel,另一种使用锁机制。使用channel的案例可以参考我的博客:golang--使用channel来同步goroutine,这里要涉及的是锁机制,更具体的是sync.WaitGroup,一种较为简单的同步方法集。sync.WaitGroup只有3个方法,Add(),Done(),Wait()。其中Done()是Add(-1)的别名。简单的来说,使用Add()添加计数,Done()减掉一个计数,计数不为0, 阻塞Wait()的运行。要注意的有一点。sync文档已经说明了的,The main goroutine calls Add to set 阅读全文
posted @ 2013-03-29 14:12 格通 阅读(16593) 评论(0) 推荐(2)
摘要: 在golang中,我们可以很轻易产生数以万计的goroutine,不过这也带来了麻烦:在运行中某一个goroutine异常退出,怎么办?在erlang中,有link原语,2个进程可以链接在一起,一个在异常退出的时候,向另一个进程呼喊崩溃的原因,然后由另一个进程处理这些信号,包括是否重启这个进程。在这方面,erlang的确做得很好,估计以后这个特性会在golang中得到实现。由此得到启发,我写了一个简单的程序,监控goroutine异常退出。package mainimport ( "log" "runtime" "math/rand" 阅读全文
posted @ 2013-03-29 13:23 格通 阅读(4119) 评论(0) 推荐(0)