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

Go用两个协程交替打印100以内的奇偶数

方式1(使用无缓冲的channel)


package main

import (
 "fmt"
 "time"
)

var flagChan = make(chan int)

func wokr1() {
 for i := 1; i <= 100; i++ {
  flagChan <- 666 // 塞入
  if i%2 == 1 {
   fmt.Println("协程1打印:", i)
  }
 }
}

func wokr2() {
 for i := 1; i <= 100; i++ {
  _ = <-flagChan // 取出
  if i%2 == 0 {
   fmt.Println("协程2打印:", i)
  }
 }
}

func main() {
 go wokr1()
 go wokr2()

 time.Sleep(3 * time.Second) // 可以通过sync.WaitGroup或者另外一个channel来控制主协程的退出
}

两个协程,一个channel,把这个无缓冲的channel当成一把锁使用(起阻塞作用)

或者使用闭包方式,如下(与上面方式一样)

package main

import (
 "fmt"
 "time"
)

func main() {
 c := make(chan int)
 go func() {
  for i := 1; i < 101; i++ {
   c <- 666
   //奇数
   if i%2 == 1 {
    fmt.Println("协程1打印:", i)
   }
  }
 }()
 go func() {
  for i := 1; i < 101; i++ {
   <-c
   //偶数
   if i%2 == 0 {
    fmt.Println("协程2打印:", i)
   }
  }
 }()
 time.Sleep(3 * time.Second)
}


方式2(设置GOMAXPROCS=1)


package main

import (
 "fmt"
 "runtime"
 "time"
)

func main() {
 //设置可同时使用的CPU核数为1
 runtime.GOMAXPROCS(1)
 go func() {
  for i := 1; i < 101; i++ {
   //奇数
   if i%2 == 1 {
    fmt.Println("协程1打印:", i)
   }
   //让出cpu
   runtime.Gosched()
  }
 }()
 go func() {
  for i := 1; i < 101; i++ {
   //偶数
   if i%2 == 0 {
    fmt.Println("协程2打印:", i)
   }
   //让出cpu
   runtime.Gosched()
  }
 }()
 time.Sleep(3 * time.Second)
}

借此可以搞清楚*runtime.GOMAXPROCS(1)runtime.Gosched()*的使用方式


交替打印切片中奇偶数位元素的值


package main

import (
 "fmt"
 "time"
)

func main() {

 sli := make([]int100)
 for k := 0; k < 100; k++ {
  sli[k] = k * 10
 }

 // 交替打印sli这个切片中奇偶数位元素的值
 // fmt.Println(len(sli)) //100

 c := make(chan int)
 go func() {
  for i := 0; i < len(sli); i++ {
   c <- 666
   //奇数
   if i%2 == 1 {
    fmt.Println("协程1打印:", sli[i])
   }
  }
 }()
 go func() {
  for i := 0; i < len(sli); i++ {
   <-c
   //偶数
   if i%2 == 0 {
    fmt.Println("协程2打印:", sli[i])
   }
  }
 }()
 time.Sleep(3 * time.Second)

}


本文由 mdnice 多平台发布

相关文章:

Go用两个协程交替打印100以内的奇偶数

方式1&#xff08;使用无缓冲的channel&#xff09; package mainimport ( "fmt" "time")var flagChan make(chan int)func wokr1() { for i : 1; i < 100; i { flagChan <- 666 // 塞入 if i%2 1 { fmt.Println("协程1打印:", i) …...

css 文字单行多行超出长度后显示 ...

0.超出… 1、单行文本超出 <div class"content">测试数据&#xff1a;css单行文本超出显示省略号--------</div><style> .content{width: 200px;height: 200px;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:el…...

C++将派生类赋值给基类

在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍…...

海外问卷调查是做什么的?

大家好&#xff0c;我是橙河。现在我来给大家简单讲解一下海外问卷调查是做什么的&#xff1f; 多年以前&#xff0c;人们就开始在网上进行海外问卷调查了。最常见的方法是通过问卷网站、做问卷或者论坛进行调查&#xff0c;现在则更多地使用各种渠道进行调查。海外国家对于问…...

Redis——数据结构介绍

Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;不过value的类型是多样的&#xff1a; String&#xff1a;hello wordHash&#xff1a;{name:"Jack",age:21}List&#xff1a;[A -> B -> C -> D]Set&#xff1a;{A,B,C}SortedSet…...

附录2-将三国演义按章节存储为不同的txt(bs4)

地址 《三国演义》全集在线阅读_史书典籍_诗词名句网 目录 1 项目分析 2 代码 1 项目分析 我们可以在首页中找到所有的章节 每一个章节是一个a标签&#xff0c;a标签连接到该章节的内容 但这个网站他有bug&#xff0c;章节都是乱套的&#xff0c;我们无视这种错误&#…...

现代C++中的从头开始深度学习:【6/8】成本函数

现代C中的从头开始深度学习&#xff1a;成本函数 一、说明 在机器学习中&#xff0c;我们通常将问题建模为函数。因此&#xff0c;我们的大部分工作都包括寻找使用已知模型近似函数的方法。在这种情况下&#xff0c;成本函数起着核心作用。 这个故事是我们之前关于卷积的讨论的…...

Vue——vue3中的ref和reactive数据理解以及父子组件之间props传递的数据

ref()函数 这是一个用来接受一个内部值&#xff0c;返回一个响应式的、可更改的 ref 对象&#xff0c;此对象只有一个指向其内部值的属性 .value。 作用&#xff1a;创建一个响应式变量&#xff0c;使得某个变量在发生改变时可以同步发生在页面上。 模板语句中使用这个变量时…...

新手如何备考PMP考试?

回头看来&#xff0c;从战略上来说&#xff1a; 备考第一重点&#xff1a;要有一个清晰的目标——我要过&#xff01; 第二重点&#xff1a;足够重视它——把它的优先级调整到仅次于工作&#xff1a;万籁俱寂&#xff0c;唯有学习。 第三重点&#xff1a;自律——有了第一点…...

FPGA输出lvds信号点亮液晶屏

1 概述 该方案用于生成RGB信号&#xff0c;通过lvds接口驱动逻辑输出&#xff0c;点亮并驱动BP101WX-206液晶屏幕。 参考&#xff1a;下面为参考文章&#xff0c;内容非常详细。Xilinx LVDS Output——原语调用_vivado原语_ShareWow丶的博客http://t.csdn.cn/Zy37p 2 功能描述 …...

算法面试-深度学习基础面试题整理(2023.8.29开始,每天下午持续更新....)

一、无监督相关&#xff08;聚类、异常检测&#xff09; 1、常见的距离度量方法有哪些&#xff1f;写一下距离计算公式。 1&#xff09;连续数据的距离计算&#xff1a; 闵可夫斯基距离家族&#xff1a; 当p 1时&#xff0c;为曼哈顿距离&#xff1b;p 2时&#xff0c;为欧…...

FireFox禁用HTTP2

问题 最近需要调试接口&#xff0c;但是&#xff0c;Chrome都是强制使用h2协议&#xff0c;即HTTP/2协议。为了排除h2协议排除对接口调用的影响&#xff0c;需要强制浏览器使用HTTP1协议。 解决 FireFox 设置firefox的network.http.http2.enabled为禁用&#xff0c;这样就禁…...

搭建HTTPS服务器

HTTPS代理服务器的作用与价值 HTTPS代理服务器可以帮助我们实现网络流量的转发和加密&#xff0c;提高网络安全性和隐私保护。本文将指导您从零开始搭建自己的HTTPS代理服务器&#xff0c;让您更自由、安全地访问互联网。 1. 准备工作&#xff1a;选择服务器与操作系统 a. 选…...

无人化在线静电监控系统的组成

无人化在线静电监控系统是一种用于检测和监控静电情况的系统&#xff0c;它可以自动地实时监测各个区域的静电水平&#xff0c;并在出现异常情况时发出报警信号。静电监控报警器则是该系统中的一个重要组成部分&#xff0c;用于接收和传达报警信号。 无人化在线静电监控系统通…...

element ui级联选择器数据处理

后端同事返回的级联选择器数据的children是childrens&#xff0c;而组件渲染只识别children&#xff0c;所以需要props自定义传入&#xff0c;代码如下 <el-form-item label"应用页面&#xff1a;" prop"appId"><el-cascader:props"{ child…...

zookeeper-3.6.4集群搭建

1、上传zookeeper安装包并解压 上传路径&#xff1a;/opt/software/ 解压路径&#xff1a;/opt/module/ 2、创建数据目录及日志目录 #数据目录&#xff1a;/data/zookeeper/data/ #3台机器创建存储目录&#xff1a; sudo mkdir -p /data/zookeeper/data#日志目录&#xff1a…...

15种下载文件的方法文件下载方法汇总超大文件下载

15种下载文件的方法&文件下载方法汇总&超大文件下载 15种下载文件的方法Pentesters经常将文件上传到受感染的盒子以帮助进行权限提升&#xff0c;或者保持在计算机上的存在。本博客将介绍将文件从您的计算机移动到受感染系统的15种不同方法。对于那些在盒子上存在且需要…...

Windows安装配置Rust(附CLion配置与运行)

Windows安装配置Rust&#xff08;附CLion配置与运行&#xff09; 前言一、下载二、安装三、配置标准库&#xff01;&#xff01;&#xff01;四、使用 CLion 运行 rust1、新建rust项目2、配置运行环境3、运行 前言 本文以 windows 安装为例&#xff0c;配置编译器为 minGW&…...

【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)

文章目录 例说mapserver静态地图参数1. Rviz中显示的地图2. mapserver保存地图详解3. 补充实验 例说mapserver静态地图参数 1. Rviz中显示的地图 在建图过程中&#xff0c;rviz会显示建图的实时情况&#xff0c;其输出来自于SLAM&#xff0c;浅蓝色区域为地图大小&#xff0c…...

【RapidAI】P0 项目总览

RapidAI 项目总览 ** 内容介绍 ** Author&#xff1a; SWHL、omahs Github&#xff1a; https://github.com/RapidAI/Knowledge-QA-LLM/ CSDN Author&#xff1a; 脚踏实地的大梦想家 UI Demo&#xff1a; ** 读者须知 ** 本系列博文&#xff0c;主要内容为将 RapidAI 项目逐…...

Windows输入自定义的现代化实践:QKeyMapper实现免重启的键盘映射与虚拟手柄方案

Windows输入自定义的现代化实践&#xff1a;QKeyMapper实现免重启的键盘映射与虚拟手柄方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper&#xff0c;Qt开发Win10&Win11可用&#xff0c;不修改注册表、不需重新启动系统&#xff0c;可立即生效和停止。支持游戏手…...

保姆级教程:用PyTorch从零搭建联邦学习MNIST实验环境(附完整代码)

联邦学习实战&#xff1a;PyTorch搭建MNIST实验环境全流程解析 1. 联邦学习与MNIST实验概述 联邦学习作为一种分布式机器学习范式&#xff0c;正在重塑传统模型训练的方式。不同于集中式训练&#xff0c;联邦学习允许多个客户端在保持数据本地化的前提下协作训练模型&#xff0…...

量化交易回测工具革新:backtrader-pyqt-ui让策略开发效率提升10倍的实践指南

量化交易回测工具革新&#xff1a;backtrader-pyqt-ui让策略开发效率提升10倍的实践指南 【免费下载链接】backtrader-pyqt-ui 项目地址: https://gitcode.com/gh_mirrors/bac/backtrader-pyqt-ui backtrader-pyqt-ui是一款将Backtrader量化回测引擎与PyQt图形界面完美…...

10. 免费GPU资源汇总(二):AutoDL、阿里云免费算力申请与使用

001、系列引言:为什么你需要关注AutoDL与阿里云免费算力? 深夜两点,示波器的波形还在跳,我盯着屏幕里那个诡异的时序毛刺,突然意识到一件事——手头这块老旧的开发板已经跑不动更复杂的模型验证了。同事上周训练一个轻量级YOLO,在自己的笔记本上跑了整整两天,结果因为散…...

终极GTA5菜单指南:如何用YimMenu彻底改变你的游戏体验

终极GTA5菜单指南&#xff1a;如何用YimMenu彻底改变你的游戏体验 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimM…...

用干词背单词,30天轻松背完小学词库1200单词!

用这个方法&#xff0c;30天轻松背完小学词库1200单词&#xff01;用干词背单词&#xff0c;30天能轻松背完小学词库1200单词&#xff01;而且会很轻松&#xff01;用干词App背完小学1200词&#xff0c;30天绰绰有余&#xff0c;甚至还能记得牢、忘得慢。小学英语单词量一般在8…...

3步解锁B站直播自由:让创作者轻松掌控推流全过程

3步解锁B站直播自由&#xff1a;让创作者轻松掌控推流全过程 【免费下载链接】bilibili_live_stream_code 用于在准备直播时获取第三方推流码&#xff0c;以便可以绕开哔哩哔哩直播姬&#xff0c;直接在如OBS等软件中进行直播&#xff0c;软件同时提供定义直播分区和标题功能 …...

OFA模型在教育领域的应用:智能试题解析系统

OFA模型在教育领域的应用&#xff1a;智能试题解析系统 让AI看懂试卷&#xff0c;让教学更智能 1. 引言&#xff1a;教育场景的智能化需求 你有没有遇到过这样的情况&#xff1f;批改一堆试卷到深夜&#xff0c;眼睛都快看花了&#xff1b;学生拿着练习题来问&#xff0c;你却…...

seo快速排名工具哪个最好用_seo快速排名工具适用于哪些类型的网站

SEO快速排名工具哪个最好用&#xff1f; 在当今竞争激烈的互联网环境中&#xff0c;一个网站如何在搜索引擎上获得快速排名成为了每个网站运营者的首要任务。关于seo快速排名工具哪个最好用这个问题&#xff0c;我们需要深入了解几款市面上常用的工具&#xff0c;并分析它们的…...

3步零成本改造:让老旧打印机秒变AirPrint无线打印服务器

3步零成本改造&#xff1a;让老旧打印机秒变AirPrint无线打印服务器 【免费下载链接】cups-avahi-airprint Docker image for CUPS intended as an AirPrint relay 项目地址: https://gitcode.com/gh_mirrors/cu/cups-avahi-airprint 当iPad遇上旧打印机&#xff1a;现代…...