美文网首页
Go 之锁住共享资源

Go 之锁住共享资源

作者: 大植先生 | 来源:发表于2017-04-16 10:30 被阅读0次

Go语言提供了传统的同步 goroutine 的机制,就是对共享资源加锁。如果需要顺序访问一个整型变量或者一段代码,atomic 和 sync 包里的函数提供了很好的解决方案。

1.原子函数

 原子函数能够以很底层的加锁机制来同步访问整型变量和指针。

运行结果

这个程序使用了 atomic 包的 AddInt64 函数。这个函数会同步整型值的加法,方法是强制同一时刻只能有一个 goroutine 运行并完成这个加法操作。当 goroutine 试图去调用任何原子函数时,这些 goroutine 都会自动根据所引用的变量做同步处理。

2.互斥所

另一种同步访问共享资源的方式是使用互斥锁(mutex)。互斥锁用于在代码上创建一个临界区,保证同一时间只有一个 goroutine 可以执行这个临界区代码。

//这个示例程序展示如何使用互斥锁来定义一段需要同步访问的代码临界区。

//资源的同步访问

运行结果:

对 counter 变量的操作使用 Lock() 和 Unlock() 函数调用定义的临界区保护起来。使用大括号并不是必须的,只是为了让临界区看起来更清晰。同一时刻只有一个 goroutine 可以进入临界区。之后,直到调用 Unlock() 函数之后,其他 goroutine 才能进入临界区。

相关文章

  • Go 之锁住共享资源

    Go语言提供了传统的同步 goroutine 的机制,就是对共享资源加锁。如果需要顺序访问一个整型变量或者一段代码...

  • Java 锁体系

    锁的分类 线程是否需要锁住共享资源: 需要锁住:悲观锁不需要锁住:乐观锁(使用CAS算法实现) 多个线程竞争同步资...

  • golang内存逃逸

    一篇很好的博客: Go 语言机制之栈与指针 Go 语言机制之逃逸分析 Go 语言机制之内存剖析 Go 语言机制之数...

  • Go实战--golang中使用JWT(JSON Web Toke

    Go实战--golang中使用JWT(JSON Web Token) 生命不止,继续 go go go !!! 之...

  • golang mutex的实现原理

    1. 前言 互斥锁是并发程序中对共享资源进行访问控制的主要手段,对此Go语言提供了非常简单易用的Mutex,Mut...

  • Go 简明教程 三步走 初级篇

    编程,从 Hello World 开始。 Go 变量之随意变 Go常量之不可变 Go 函数定义 "返回参数列表" ...

  • 文章目录

    Go 源码解读篇 《Go源码解读篇》之常见数据结构(list) 《Go源码解读篇》之 Error 工作中知识总结 ...

  • 技术术语学习之 go over

    技术术语学习之 go over 定义 PHRASAL VERB If you go over a document...

  • window之共享资源文件

    搞过web网站开发的人都知道,本地测试通过的代码需要上传服务器,并在服务器上运行起来。才能供别人web访问。so,...

  • java 并发编程相关知识点(一)

    共享资源 什么是共享资源?共享资源指的是多个线程同时对同一份资源进行访问(读写操作),被多个线程访问的资源...

网友评论

      本文标题:Go 之锁住共享资源

      本文链接:https://www.haomeiwen.com/subject/ppfaattx.html