Go语言中文网 为您找到相关结果 60

Go-同步原语与锁(一)互斥锁与读写锁

本文将讲解一下Go语言中的同步原语与锁。会阐述几种常见的锁,剖析其流程,然后针对每种同步原语举几个例子。由于文章比较长,为方便阅读,将这部分拆解为两部分。本文是第一部分 互斥锁与读写锁。 环境: go version go1.8.7 darwin/amd64 1 mutex 1.1 结构 先看下mutex在底层的结构: 代码位置sync/mutex.go type Mutex struct { state int32 // 状态 sema uint32 // 信号 } 在mutex中 主要有mutexLocked , mutexWorken 两种状态,mutexWaiterShift 是统计了等待mutex的routine 数量。 1.2 流程 参考文献中讲到Go1.9 针对互斥锁增加了饥饿...阅读全文

博文 2019-09-26 00:32:47 aside section ._1OhGeD

决定以太坊未来的3个重要项目

在过去的几年里,以太坊已经成为加密货币领域最重要的项目。 作为市场中大多数代币的 底层基础设施,以太坊网络的健康对于加密数字币生态系统中的其他环节至关重要,以太坊 也一直在努力跟上增长。 交易容量一直困扰着以太坊网络,以至于许多专家推出了辅助项目 来创建替代性区块链,以便从头解决一些限制。 然而,以太坊团队并没有闲着,目前已经 有几个项目作为以太坊基金会的一部分进行孵化,重点就是解决当前版本的以太坊中的一些 基本限制。 以太坊的第二层扩容解决方案改进了以太坊网络的一些基本方面,如共识协议或其安全模型。 考虑到以太坊公共区块链的规模和活跃度,你可以想象在不中断网络的情况下实施这些增强 措施是一项巨大的挑战。 虽然以太坊网络有好几个第二层扩容项目,但有三个以及接近全面...阅读全文

map复制 "encoding/json"

```go package main import ( "encoding/json" "fmt" ) var h map[string]string func init() { h = map[string]string{ "a": "aa", "b": "bb", } } func main() { // 复制map不影响原map bs, _ := json.Marshal(h) var h2 map[string]string err := json.Unmarshal(bs, &h2) if err != nil { fmt.Println("error: ", err.Error()) } h2["c"] = "cc" if _, ok := h["c"]; !ok { fmt.P...阅读全文

博文 2018-01-19 13:51:23 hfyarvin

Go语言sync包的应用详解

在并发编程中同步原语也就是我们通常说的锁的主要作用是保证多个线程或者 goroutine在访问同一片内存时不会出现混乱的问题。Go语言的sync包提供了常见的并发编程同步原语,上一期转载的文章《Golang 并发编程之同步原语》中也详述了 Mutex、RWMutex、WaitGroup、Once 和 Cond 这些同步原语的实现原理。今天的文章里让我们回到应用层,聚焦sync包里这些同步原语的应用场景,同时也会介绍sync包中的Pool和Map的应用场景和使用方法。话不多说,让我们开始吧。 sync.Mutex sync.Mutex可能是sync包中使用最广泛的原语。它允许在共享资源上互斥访问(不能同时访问): mutex := &sync.Mutex{} mutex.Lock() // U...阅读全文

博文 2020-05-05 11:32:43 Kevin

Go-同步原语与锁(二)WaitGroup、Once与Cond

本文将讲解一下Go语言中的同步原语与锁。会阐述几种常见的锁,剖析其流程,然后针对每种同步原语举几个例子。由于文章比较长,为方便阅读,将这部分拆解为两部分。本文是第二部分 WaitGroup、Once与Cond。 环境: go version go1.8.7 darwin/amd64 1 WaitGroup 1.1 结构 type WaitGroup struct { noCopy noCopy // 64-bit value: high 32 bits are counter, low 32 bits are waiter count. // 64-bit atomic operations require 64-bit alignment, but 32-bit // compilers ...阅读全文

博文 2019-09-26 01:32:42 aside section ._1OhGeD

Golang 并发编程与同步原语

浅谈 Go 语言实现原理原文链接:https://draveness.me/golang/c... 当提到并发编程、多线程编程时,我们往往都离不开『锁』这一概念,Go 语言作为一个原生支持用户态进程 Goroutine 的语言,也一定会为开发者提供这一功能,锁的主要作用就是保证多个线程或者 Goroutine 在访问同一片内存时不会出现混乱的问题,锁其实是一种并发编程中的同步原语(Synchronization Primitives)。 在这一节中我们就会介绍 Go 语言中常见的同步原语 Mutex、RWMutex、WaitGroup、Once 和 Cond 以及扩展原语 ErrGroup、Semaphore和 SingleFlight 的实现原理,同时也会涉及互斥锁、信号量等并发编程中的常...阅读全文

博文 2019-07-04 10:32:44 draveness

这个机器人应用,可以让机器人变成火警情报员

_可编程全地形机器人HEXA在正式面向用户时,曾发起“HEXA人类导师计划”,得到不少用户的购买申请,随着体验的深入,不少用户开发出了许多有趣实用的机器人应用,我们将陆续把这些应用的代码分享出来,感兴趣的伙伴们可以尝试体验。今天分享的是用户RiverLLZ开发的火情警报的机器人应用(Skill)——Fire Marshall Rob_ ![输入图片说明](https://static.oschina.net/uploads/img/201711/10142843_0MWN.png "在这里输入图片标题") 我在入手HEXA之前,曾玩过Arduino套件。所以在拿到HEXA之后很自然就想把两样”混搭”一下。在Arduino套件里我有一个火焰传感器,是之前在网上买的,非常便宜。要是能...阅读全文

Object-oriented

Method belog to struct package mainimport ( "fmt" "math")type Rectangle struct{ width, height float64}type Circle struct { radius float64}func (r Rectangle) area(){ return r.width*r.height}func (c Circle) area(){ return c.radius * c.radius * math.Pi}func main(){ r1 := Rectangle{12,2} c1 := Circle{10} fmt.Println("Area of r1 is: ",r1.area())} Noted:...阅读全文

博文 2018-10-24 01:34:39 曹小恒

Go语言sync包的应用详解

在并发编程中同步原语也就是我们通常说的锁的主要作用是保证多个线程或者 goroutine在访问同一片内存时不会出现混乱的问题。Go语言的sync包提供了常见的并发编程同步原语,上一期转载的文章《Golang 并发编程之同步原语》中也详述了 Mutex、RWMutex、WaitGroup、Once 和 Cond 这些同步原语的实现原理。今天的文章里让我们回到应用层,聚焦sync包里这些同步原语的应用场景,同时也会介绍sync包中的Pool和Map的应用场景和使用方法。话不多说,让我们开始吧。 sync.Mutex sync.Mutex可能是sync包中使用最广泛的原语。它允许在共享资源上互斥访问(不能同时访问): mutex := &sync.Mutex{} mutex.Lock() // U...阅读全文

博文 2020-05-05 23:34:25 kevinyan