美文网首页
golang利用channel实现线程同步互斥信号量

golang利用channel实现线程同步互斥信号量

作者: WinddddRunner | 来源:发表于2017-08-18 23:28 被阅读0次

1、利用channel实现线程互斥

package main

import (
    "fmt"
    "sync"
)

var value int = 0

func add(ch chan struct{}, group *sync.WaitGroup) {
    ch <- struct{}{}
    value++
    <-ch
    group.Done()
}
func main() {
    var wg sync.WaitGroup
    var channel = make(chan struct{}, 1)
    wg.Add(10000)
    for i := 0; i < 10000; i++ {
        go add(channel, &wg)
    }
    wg.Wait()
    fmt.Println(value)
}

2、利用channel实现线程同步

package main

import (
    "fmt"
    "sync"
)

func funcA(ch chan struct{},group *sync.WaitGroup)  {
    fmt.Println("A函数执行完毕")
    ch<- struct{}{}
    group.Done()
}

func funcB(ch chan struct{},group *sync.WaitGroup)  {
    <-ch
    fmt.Println("B函数执行完毕")
    group.Done()
}
func main() {
    var wg sync.WaitGroup
    wg.Add(2)
    ch:=make(chan struct{})
    go funcA(ch,&wg)
    go funcB(ch,&wg)
    wg.Wait()
}

3、利用channel实现信号量

package main

import (
    "fmt"
    "sync"
)

func funcA(ch chan struct{},group *sync.WaitGroup)  {
    <-ch
    fmt.Println("A函数执行完毕")
    ch<- struct{}{}
    group.Done()
}

func funcB(ch chan struct{},group *sync.WaitGroup)  {
    <-ch
    fmt.Println("B函数执行完毕")
    ch<- struct{}{}
    group.Done()
}
func main() {
    var wg sync.WaitGroup
    wg.Add(2)
    ch:=make(chan struct{},1)
    ch<- struct{}{}
    go funcA(ch,&wg)
    go funcB(ch,&wg)
    wg.Wait()
}

相关文章

  • golang利用channel实现线程同步互斥信号量

    1、利用channel实现线程互斥 2、利用channel实现线程同步 3、利用channel实现信号量

  • 理解操作系统之信号量的应用

    利用信号量实现进程互斥(模式) 利用信号量实现前驱关系(模式) 利用记录型信号量实现同步(模式) 1.利用信号量实...

  • Java并发编程——信号量与互斥量

    信号量用于线程同步,互斥量用户保护资源的互斥访问。 信号量与互斥量的区别 互斥量用于线程的互斥,信号线用于线程的同...

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • 7.信号量的使用2021-11-01

    信号量相当于裸机中的标志 信号量可以由不同的线程释放,互斥量必须由相同的线程释放。 信号量:实现线程间的通信,同步...

  • Linux系统编程—进程间同步

    我们知道,线程间同步有多种方式,比如:信号量、互斥量、读写锁,等等。那进程间如何实现同步呢?本文介绍两种方式:互斥...

  • Linux线程同步

    Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。 Linux线程同步-----互斥锁...

  • 信号量与互斥锁

    线程同步(互斥锁与信号量的作用与区别) “信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别...

  • PV操作

    PV操作是利用信号量机制来实现的一种有效的进程同步与互斥工具,可以实现资源的互斥使用。PV操作属于低级通信原语,使...

  • OpenMP多线程——Parallel for

    多线程——线程同步 数据竞争问题 线程互斥同步——critical 线程互斥同步——atmoic 线程互斥同步——...

网友评论

      本文标题:golang利用channel实现线程同步互斥信号量

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