当前位置: 首页 > news >正文

004 Golang-channel-practice 左右括号匹配

第四题 左右括号打印

一个协程负责打印“(”,一个协程负责打印“)”,左右括号的数量要匹配。在这道题目里,我在main函数里进行了一个死循环。会产生一个随机数,随机数就是接下来要打印的左括号的数量。

例如:((((()))))、(())、()。这样是正确的。一个左括号要匹配一个右括号。数量要对上~

())、((())。一看就左右不平衡,这就是错的!

在这里,我们运用了“空结构体”,这个空结构体是用来“占位置”的。A协程打印了多少个左括号,A协程就要往channel传递多少个空结构体,B协程再根据channel中空结构体的数量,来打印右括号

 

package main
import ("fmt""math/rand""sync""time"
)
func producer(c chan struct{}, times int) {defer close(c)for i := 0; i < times; i++ {fmt.Print("(")c <- struct{}{}}
}
func consumer(c chan struct{}, wg *sync.WaitGroup) {defer wg.Done()for range c {fmt.Print(")")}
}
func main() {rand.Seed(time.Now().UnixNano())for {times := rand.Intn(10) + 1c := make(chan struct{})var wg sync.WaitGroupgo producer(c, times)// 启动多个消费者 goroutinefor i := 0; i < times; i++ {wg.Add(1)go consumer(c, &wg)}wg.Wait()}
}

来看看输出!

5a24b2238ceb4f66841111559fd1743b.png

 

http://www.lryc.cn/news/281665.html

相关文章:

  • MS2351M/MS2351D:RF 检测器/控制器
  • vue中使用js-doc
  • Hive知识点
  • android自启动
  • cookie、Web Storage
  • 【rk3568】01-环境搭建
  • 编程笔记 html5cssjs 036 CSS概述
  • Vue入门七(Vuex的使用|Vue-router|LocalStorage与SessionStorage和cookie的使用)
  • 多级缓存架构(三)OpenResty Lua缓存
  • 写点东西《Docker入门(上)》
  • chatgpt实用技巧之二反问式提示
  • 【数据结构和算法】奇偶链表
  • MVC框架
  • 学习笔记之——3D Gaussian Splatting及其在SLAM与自动驾驶上的应用调研
  • Github Copilot 的使用方法和快捷键
  • 开源iMES工厂管家 - 详细安装部署指南(图解)- 全网独稿
  • Codeforces Round 919 (Div. 2)
  • 面向经验丰富的开发人员的最佳 Linux 发行版
  • Rust-借用检查
  • xcode安装及运行源码
  • x-cmd pkg | czg - git commit 智能生成工具
  • Go的并发练习题目
  • Python 网络编程之粘包问题
  • 旧衣回收小程序搭建:降低企业成本,提高回收效率!
  • Jmeter后置处理器——JSON提取器
  • [SWPUCTF 2022 新生赛]奇妙的MD5
  • MHFormer 论文解读
  • Python列表append()函数使用详解
  • 第08章_面向对象编程(高级)拓展练习(关键字:static,代码块,关键字:final,抽象类和抽象方法,接口,内部类,枚举类,注解,包装类)
  • 分布式光伏运维平台在提高光伏电站发电效率解决方案