golang 两个go程轮流打印一个切片的实现
作者:李培冠 发布时间:2024-02-12 09:11:29
标签:go程,打印,切片
问题描述:
两个 go 程轮流打印一个切片。
Golang 实现:
使用两个 channel,只用来判断
package main
import (
"fmt"
"sync"
)
// 两个 go 程轮流打印一个切片
func main() {
ch1 := make(chan bool, 1)
ch2 := make(chan bool, 1)
ch1 <- true
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
var i int
var wg sync.WaitGroup
wg.Add(2)
go func() {
for ; i < len(nums) && <-ch1; i++ {
fmt.Println(nums[i])
ch2 <- true
}
wg.Done()
}()
go func() {
for ; <-ch2 && i < len(nums); i++ {
fmt.Println(nums[i])
ch1 <- true
}
wg.Done()
}()
wg.Wait()
}
注意
要理清两个子 go 程的判断条件,要注意是先判断 i 的大小还是先判断管道是否有值。
稍有不慎就会发生死锁哦。
使用两个 channel,用来传值
package main
import (
"fmt"
"sync"
)
// 两个 go 程轮流打印一个切片
func main() {
ch1 := make(chan int, 1)
ch2 := make(chan int, 1)
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
ch1 <- nums[0]
i := 1
numsLen := len(nums)
var wg sync.WaitGroup
wg.Add(2)
go func() {
for ; i < numsLen; i++ {
val := <-ch1
fmt.Println(val)
ch2 <- i+1
}
wg.Done()
}()
go func() {
for ; i < numsLen; i++ {
val := <- ch2
fmt.Println(val)
ch1 <- i+1
}
wg.Done()
}()
wg.Wait()
}
来源:https://www.cnblogs.com/lpgit/p/13539657.html


猜你喜欢
- 本文实例讲述了JS基于开关思想实现的数组去重功能。分享给大家供大家参考,具体如下:场景: 比如给你一个数组var Arr = [ 25, 7
- mat矩阵和npy矩阵互相转换numpy.narray矩阵保存为mat文件import numpy as npimport scipy.io
- 使用Pyinstaller打包整个项目今天真的被Pyinstaller给坑到了!!!本文利用spec文件进行对整个项目进行打包,直接输入命令
- 目录前言typeof是否能正确判断类型?instanceof是否能正确判断类型?Object.prototype.toString.call
- 1. 首先导入一些python画图的包,读取txt文件,假设我现在有两个模型训练结果的records.txt文件import numpy a
- 网页链接:https://www.huya.com/g/4079 这里的主要步骤其实还是和我们之前分析的一样,如下图所示:这里再简单带大家看
- Image and text elements that appear in another element are called floa
- 方法一:#-*- coding:utf-8 -*-from sqlalchemy import create_engineclass mys
- 本文实例讲述了python sqlite的Row对象操作。分享给大家供大家参考,具体如下:一 代码import sqlite3conn=sq
- 概述I/O操作不仅包括屏幕输入输出,还包括文件的读取与写入,Python提供了很多必要的方法和功能,进行文件及文件夹的相关操作。本文主要通过
- 在多数的现代语音识别系统中,人们都会用到频域特征。梅尔频率倒谱系数(MFCC),首先计算信号的功率谱,然后用滤波器和离散余弦变换的变换来提取
- websocketWebsocket只是一个网络通信协议就像 http、ftp等都是网络通信的协议;不要多想;相对于HTTP这种非持久的协议
- 模式特点:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。我们来看一下下面这样的程序结构:c
- 方法一:同步操作1.pipelines.py文件(处理数据的python文件)import pymysqlclass LvyouPipeli
- DataLoaderDataset不能满足需求需自定义继承torch.utils.data.Dataset时需要override __ini
- django接口可以通过localhost或者127.0.0.1进行访问,但无法通过本机ip地址访问1. 修改django项目中的setti
- 使用cv2.canny进行图像边缘检测CV2提供了提取图像边缘的函数canny。其算法思想如下:1.使用高斯模糊,去除噪音点(cv2.Gau
- python 远程统计文件#!/usr/bin/python#encoding=utf-8import timeimport osimpor
- 一、背景有一段代码,因为调用了封装的方法,所以会有一些本来不需要的返回值。这些返回值该怎么处理才能让它消失呢。有的人会说,清除变量不就好了吗
- 应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。那么如何提高数据库SQL语句执行速度呢?有人会说性