- 博客(10)
- 收藏
- 关注
原创 golang协程并发同步-条件变量
条件变量:到一定条件或事件再处理数据用于很典型的生成-消费模型func main(){ proch := make(chan bool,1) conch := make(chan bool,1) wg := sync.WaitGroup{} wg.Add(2) go consume(conch,proch,&wg) go producer(proch,conch,&...
2019-07-20 17:44:45 732
原创 golang协程并发同步-信号量
只允许1个进入临界区的是互斥, 允许多个进入临界区的是信号量.func toilet(i int,ch chan int,wg *sync.WaitGroup){ fmt.Println(i,"进入厕所") rand.Seed(int64(i)) t := rand.Intn(10) time.Sleep(time.Duration(t)*time.Second)//随机时间 fmt....
2019-07-20 16:40:36 685
原创 golang协程并发同步-死锁问题
死锁产生条件:互斥,占有并等待,不可抢占,循环等待type Account struct { Id string Balance float64 lock sync.Mutex}func (a *Account) deposit(amount float64){ a.Balance += amount}func (a *Account) withdrew(amount floa...
2019-07-20 15:36:04 1196
原创 golang协程并发同步-互斥锁
func main() { num := 0 lock := sync.Mutex{} wg :=sync.WaitGroup{} wg.Add(2) go add(&num,&lock,&wg)//需要传入同一个锁 go reduce(&num,&lock,&wg) wg.Wait()//等待协程完成 fmt.Println(num...
2019-07-20 14:44:53 970
原创 golang实现十大经典算法:选择排序
选择排序要点:每次都选出最大的,放到位置上选择排序:时间较长,不稳定func selectSort(a[]int ,n int){ for i:=n;i>=0;i--{ max := i for j:=0;j<i;j++{ if a[j]>a[max]{ max = j } } a[max],a[i]=a[i],a[max] }}...
2019-07-02 18:12:23 305
原创 golang实现十大经典算法:冒泡排序
冒泡排序要点:两两比较,每次都浮出最大的那个冒泡排序优点:稳定,不需要额外空间,时间较长func bubSort(a[]int,n int){ for i:=n;i>0;i--{//总共浮出来的个数 for j:=0;j<i-1;j++{ if a[j]>a[j+1]{ a[j],a[j+1]= a[j+1],a[j] } } }}...
2019-07-02 18:10:05 161
原创 golang实现十大经典算法:堆排序
堆排序要点是运用堆的特点:最大堆前一半都是父节点堆排序的优点:已有最大堆,排序会快func main(){ a := []int{0,1,2,4,5,6,7,8,9,10}//注意0是开头,必定存在 heapSort(a,len(a)-1)}func shiftDown(a[]int,n int,i int){//下沉 for i*2<=n{ i = i*2 if i+...
2019-07-02 15:58:40 268
原创 golang实现十大经典算法:归并排序
归并排序要点,不断二分并排序,直到最后两个大的有序合并归并排序优点:时间复杂度:log(n),有序归并排序缺点:需要大量空间func merge(a[]int,b[]int)[]int{ l := []int{} for len(a)>0&&len(b)>0{ if a[0]<b[0]{ l = append(l,a[0]) a = ap...
2019-07-01 18:38:56 261
原创 golang实现十大经典算法:插入排序
插入排序的要点是找一个合理的位置插进入插入排序优点:原数组有序会非常快,稳定golang数组没有插入的操作,所以得自己实现 a := []int{1,3,4,52,2,5,7,3,7,9} for i:=1;i<len(a);i++{ todo := true for j:=i-1;j>=0;j--{ if a[j]<a[i]{ todo = fal...
2019-07-01 16:39:38 195
原创 golang实现十大经典算法:快速排序
快速排序中心点就是定义一个pivot,将小于piovt的放左边,大于pivot放右边,再不断循环这过程直到有序golang代码实现func main(){ l := []int{0,0,0,14124,124124,1} quicksort(l,0,len(l)-1)}func partion(a []int,start int ,end int) int { pivot,i,j :...
2019-07-01 14:49:54 515
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人