go | chan 并发传输或者设置chan缓存|死锁

chan 在定义的时候设置缓存,或者定义一个协程,去获取chan 传输
如果不是这两种解决方案,会出现线程死锁问题
可以自行尝试

采用goroutine 并发执行

//go 采用协程处理接受chan
package main

import (
	"fmt"
)

func main() {

	fmt.Println("Hello, 世界")

	// 创建一个整数类型的通道
	ch1 := make(chan int)
	ch2 := make(chan int)

	// 启动一个 Goroutine 并发地将通道 ch1 中的数据发送到通道 ch2 中
	go func() {
		tmp := <-ch1
		ch2 <- tmp
		fmt.Println("tmp ", tmp)
	}()

	// 向通道 ch1 发送数据
	ch1 <- 22

	// 从通道 ch2 中接收数据
	data := <-ch2

	// 打印接收到的数据
	fmt.Println("data:", data)

	fmt.Println("test end....")
}

输出结果


Hello, 世界
data: 22
test end....

设置chan 缓冲

fmt.Println("Hello, 世界")

	// 创建一个整数类型的通道
	ch1 := make(chan int, 1)
	ch2 := make(chan int, 1)

	ch1 <- 22
	tmp := <-ch1
	// 从通道 ch2 中接收数据
	ch2 <- tmp
	tmp2 := <-ch2

	// 打印接收到的数据
	fmt.Println("tmp: ", tmp, "tmp2: ", tmp2)

	fmt.Println("test end....")

执行结果

Hello, 世界
tmp:  22 tmp2:  22
test end....

总结

go 的并发特别方便,成本也比开辟线程要低,那么同样的也会更容易的带来死锁问题。

相关推荐

  1. go | chan 并发传输或者设置chan缓存

    2024-04-08 07:48:05       41 阅读
  2. 2024-04-08 07:48:05       45 阅读
  3. Oracle Foreign key 无索引导致的 deadlock 或者hang

    2024-04-08 07:48:05       38 阅读
  4. 以及如何避免

    2024-04-08 07:48:05       39 阅读
  5. 资源、、如何监测

    2024-04-08 07:48:05       41 阅读
  6. 设计基于并发数据结构

    2024-04-08 07:48:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 07:48:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 07:48:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 07:48:05       82 阅读
  4. Python语言-面向对象

    2024-04-08 07:48:05       91 阅读

热门阅读

  1. Elasticsearch 如何实现 master 选举

    2024-04-08 07:48:05       38 阅读
  2. 柒拾贰- tushare 模拟策略交易 (三)

    2024-04-08 07:48:05       33 阅读
  3. STM32F103系列五个特殊引脚作为GPIO时的配置

    2024-04-08 07:48:05       34 阅读
  4. 元类创建类的流程详解

    2024-04-08 07:48:05       39 阅读
  5. 【测试开发学习历程】python函数

    2024-04-08 07:48:05       28 阅读