我的第一个Golang程序

本程序参考:GO语言实战 GO IN ACTION
package main

import (
   "fmt"
   "runtime"
   "sync"
)

func   main(){
   //分配一个逻辑处理器给调度器使用
   runtime.GOMAXPROCS(1)

   //wg来等待程序完成
   //计数加2,表示要等待两个goroutine
   var wg sync.WaitGroup
   wg.Add(2)



   fmt.Println("Start Goroutines")

   //声明一个匿名函数,并创建一个goroutine
   go func() {

      //在函数退出时调用DOne来通知main函数工作已经完成
      defer wg.Done()

      //显示字母表三次
      for count:=0;count<3;count++{
         for char :='a';char <'a'+26;char ++{
            fmt.Printf("%c",char)
         }
      }
   }()

   //声明一个匿名函数,并创建一个goroutine
   go func() {

      //在函数退出时调用DOne来通知main函数工作已经完成
      defer wg.Done()

      //显示字母表三次
      for count:=0;count<3;count++{
         for char :='A';char <'A'+26;char ++{
            fmt.Printf("%c",char)
         }
      }
   }()

   //等待goroutine结束
   fmt.Println("waiting to finish")
   wg.Wait()

   fmt.Println("\nTerminating Program")

}


/*
runtime.GOMAXPROCS 去设置CPU,Golang 默认使用所有的cpu核
*/

运行结果:

修改:

runtime.GOMAXPROCS(2)  备注:电脑为双核处理器
 

/* golang中的同步是通过sync.WaitGroup来实现的.WaitGroup的功能:它实现了一个类似队列的结构,可以一直向队列中添加任务, 当任务完成后便从队列中删除,如果队列中的任务没有完全完成,可以通过Wait()函数来出发阻塞,防止程序继续进行, 直到所有的队列任务都完成为止.WaitGroup总共有三个方法: Add(delta int), Done(), Wait()。Add:添加或者减少等待goroutine的数量 Done:相当于Add(-1) Wait:执行阻塞,直到所有的WaitGroup数量变成0 */

当程序删除 

wg.Wait()后,运行结果

猜你喜欢

转载自blog.csdn.net/weixin_40161254/article/details/82897920
今日推荐