专栏首页Golang语言社区Golang语言学习-并发

Golang语言学习-并发

goroutine:

由GO运行环境管理的轻量级线程

channel:

有类型的管道,操作符为 <- 数据流向箭头指向的方向

使用make(chan 缓冲数据类型 缓冲区长度)来创建

使用close(chan)来关闭管道,只有发送者才允许关闭管道

ch := make(chan int 10)

ch <- 10

a := <- ch

a := int(0)

a = <- ch

单向管道:单向管道只能用于发送或接收数据。

ch1 := make( chan int)

ch2 := <-chan int(ch1) //ch2就被定义为一个只能读取的channel

ch3 := chan<- int(ch1) //ch3就被定义为一个只能接收的channel

select:

为了让一个goroutine能在多个通讯操作上进行等待,可以使用select

select会阻塞,直到某个分支中的通讯准备好后可以继续执行。

当有多个通讯准备好时,会随机选择一个进行通讯。

同步:

同步必须使用到锁,sync包中提供了两种锁:sync.Mutex 和 sync.RWMutex。

Mutex是最简单的互斥量。

RWMutex也是一种互斥量,不过在读操作时,会阻止写,但不会阻止读。

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-04-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Golang语言学习-并发

    goroutine: 由GO运行环境管理的轻量级线程 channel: 有类型的管道,操作符为 <- 数据流向箭头指向的方向 使用make(chan ...

    李海彬
  • channel机理及调度理解

    当当 广告

    李海彬
  • channel机理及调度理解

    《Go语言编程》一书介绍了libtask库,可以认为这个库等同于go的底层goroutine实现。

    李海彬
  • Golang语言学习-并发

    goroutine: 由GO运行环境管理的轻量级线程 channel: 有类型的管道,操作符为 <- 数据流向箭头指向的方向 使用make(chan ...

    李海彬
  • 挑战程序竞赛系列(12):2.5最小生成树

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1147447
  • 挑战程序竞赛系列(24):3.5最大流与最小割

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1147447
  • 手把手教你写linux系统下贪吃蛇(二)

    创建线程后把第一篇用到的refresh()函数都删除,不然因为缓存区的原因产生乱码

    用户2965768
  • 交换排序—快速排序(Quick Sort)

    2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。

    瑾诺学长
  • asp.net mvc 验证码

    阿炬
  • leetcode 70 Climbing Stairs

    You are climbing a stair case. It takes n steps to reach to the top.

    流川疯

扫码关注云+社区

领取腾讯云代金券