golang 多个routine之间的同步

本文以一个例子的方式介绍channel在同步中的使用。

下面的例子中,主task首先阻塞,直到两个task完成后,再继续执行。

package main

import (
        "log"

        "time"
)

func main() {

        ch := make(chan int)

        go task1(ch)
        go task2(ch)

        for i:=0; i<2; i++ {

                v := <-ch
                log.Println("one task done:", v)
        }

        log.Println("All task done")

}

func task1(c chan int) {

        time.Sleep(1*time.Second)

        c <- 1

}

func task2(c chan int) {

        time.Sleep(10*time.Second)

        c <- 2

}

output:

2018/02/03 22:18:07 one task done: 1

2018/02/03 22:18:16 one task done: 2

2018/02/03 22:18:16 All task done

执行过程如下:

主task阻塞;

task1等待1秒后,完成;

task2等待10秒后,完成;

最后主task,继续执行到完成;

原文地址:https://www.cnblogs.com/lanyangsh/p/8410971.html

时间: 2024-07-30 10:04:51

golang 多个routine之间的同步的相关文章

根据已经commit的数据,进行leader和peon之间的同步

Leader Election基本设计 按照rank表示优先级解决冲突问题,为每个monitor预先分配了一个rank 只会接受优先级(rank)比自己高.epoch比上次已接受的epoch大的选举请求 当选的leader,不一定有最新的数据.所以在phase 1中,会根据已经commit的数据,进行leader和peon之间的同步 用奇数的epoch表示选举状态,偶数表示稳定状态 一旦选举成功,会形成一个quorum,在该leader当选期间,所有提议,必须quorum中全部成员同意. Lea

C# 线程之间的同步

1.通过Join方法,暂停当前线程 Thread secondThread = new Thread(new ThreadStart(ThreadMethod)); secondThread.Start(); ... secondThread.Join(); 2.通过启动APM异步操作的方法,得到一个IAsyncResult对象,通过它有三种方法使得两个线程同步. public interface IAsynResult { object AsyncState{get; } WaitHandle

怎样在 SSASserver之间做同步

 简单介绍: 从SQL Server 2005開始,分析服务就支持了同步的功能.本文将介绍怎样在SQL Server 2012下同步Adventureworks的分析服务数据库.通过同步的功能,我们就来能够弥补分析服务在差异备份以及全量备份上的不足,从而间接的实现类似故障转移这种功能. Adventureworks是微软的演示样例数据库项目,包括了OLTP,数据仓库以及分析服务数据库的演示样例,能够在以下这个链接里下载到这个演示样例库: http://msftdbprodsamples.co

贴一段demo代码,演示channel之间的同步

package main import ( "fmt" "time" ) func deskGoRoutine(index int, userChannel chan string, deskChannel chan string) { for { fmt.Println("deskGoRoutine", index) select { case info := <-userChannel: if info == "userMsg

Java多线程——线程之间的同步

Java多线程——线程之间的同步 摘要:本文主要学习多线程之间是如何同步的,以及如何使用synchronized关键字和volatile关键字. 部分内容来自以下博客: https://www.cnblogs.com/hapjin/p/5492880.html https://www.cnblogs.com/paddix/p/5367116.html https://www.cnblogs.com/paddix/p/5428507.html https://www.cnblogs.com/liu

SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步

最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错误,请指出):主数据库一般是把数据发布出去,然后在连接从数据库对发布的数据进行订阅,同步到从数据库中. 1.发布.发布需要用实际的服务器名称,不能使用服务器的IP地址进行.能发布的信息包括[表].[存储过程].[用户函数]如果使用IP会有错误,如下图: 具体发布过程如下: 1.找到数据库服务器下的[

连麦方案中各条流之间时间戳同步问题

在现今如火如荼的直播热潮中,最新的技术趋势是多用户之间进行连麦交互.连麦技术需要处理很多问题,包括音视频的解码及重新编码,音频重采样,视频帧率重采样,音视频同步等.其中的音视频同步包括合并后的流中的音视频时间同步,也包括多个连麦用户之间流的时间同步问题.这里讨论多个连麦用户之间的流时间同步问题. 这里提出一种方案,算是抛砖引玉,拿出来仅供大家讨论,欢迎指正. 方案说起来很简单,就一句话:各连麦用户使用同一时间参考系.为了实现该目标,需要以下几个步骤保证: 1. 各连麦用户开始推流前,到同一时间同

vuex 实现vue中多个组件之间数据同步以及数据共享。

前言 在一些项目中有很多数据状态之间要实现数据共享状态共享,例如购物车的数据.用户的登录状态等等.vue父元素是可以通过props向子元素传递参数,子元素也可以通用smit向父元素传递参数.但是像购物车这种在项目中多个位置的引用时就会变得很麻烦.例如项目中使用了三个购物车的组件,那么当其中一个组件的值发生改变时,就要通过自身告诉父组件我的值发生改变了,然后父组件在通知其他两个购物车组件值发生改变了,需要进行同步,这样就会变得很麻烦.而vue-v就可以帮助我们解决这个繁琐的问题.

DataX实现HDFS与MySQL之间数据同步

本案例仅适用于HDFS与MySQL之间的数据同步实现. 1.  在编译安装之前注意将release下面的setSharePath方法中的路径改为你自己的安装路径,笔者的为/home/woody/datax/libs. 2.  rpm打包之前,要修改*.spec文件中的路径,dataxpath,此外可能还需要注解掉部分赋值文件的代码,如cp  –r ${OLDPWD}****.properties ****.conf,在engine.spec中的jar包复制语句也要注解掉. 3.  注意将hdfs