美文网首页
管道通信与关闭

管道通信与关闭

作者: bocsoft | 来源:发表于2018-12-04 11:47 被阅读0次

package main

import "fmt"

func main() {
    dataChan := make(chan int, 5)
    syncChan1 := make(chan struct{}, 1)
    syncChan2 := make(chan struct{}, 2)  //主协程信号量,如果没有这个通道,会瞬间停止

    go func() { //用于演示接收操作
        <-syncChan1
        for {
            if elem, ok := <-dataChan; ok {
                fmt.Printf("Received: %d [receiver]\n", elem)
            } else {
                break
            }
        }
        fmt.Println("Done. [receiver]")
        syncChan2 <- struct{}{}
    }()

    go func() { //用于演示发送操作
        for i := 0; i < 5; i++ {
            dataChan <- i
            fmt.Printf("Sent: %d [sender]\n", i)
        }
        close(dataChan) //关闭通道
        syncChan1 <- struct{}{}//两个通道间发送信号量
        fmt.Println("Done. [sender]")

        syncChan2 <- struct{}{}
    }()

    <-syncChan2  //分别为接收和发送的信号,不能注释掉
    <-syncChan2
}

/*
输出结果:
Sent: 0 [sender]
Sent: 1 [sender]
Sent: 2 [sender]
Sent: 3 [sender]
Sent: 4 [sender]
Done. [sender]
Received: 0 [receiver]
Received: 1 [receiver]
Received: 2 [receiver]
Received: 3 [receiver]
Received: 4 [receiver]
Done. [receiver]
 */




相关文章

  • 管道通信与关闭

  • 十二 Shell篇——管道与重定向

    前言 管道:进程通信的一个通信工具重定向:可以将程序结果输出到某个文件,也可以将文件代替键盘作为输入 管道与管道符...

  • Linux 进程间通信

    进程间通信 一 进程间通信 -- 管道 mkfifo test 创建管道文件 匿名管道和命名管道:匿名管道:匿名管...

  • Linux-C-day-2-进程通过--管道通信

    管道通信 进程间管道通信方式可以通过man 7 pipe来查看; 匿名管道 单工管道 打开管道:使用popen()...

  • 进程通信方式

    1、管道与有名管道管道可用于具有亲缘关系的父子进程间通信,有名管道除了具有管道的特点外,还允许无亲缘关系的进程进行...

  • LInux进程之间的通信-有名管道(FIFO)

    Linux进程间的通信-有名管道FIFO 管道的通信只能存在于具有亲缘关系的进程之间,比如fork出来的子进程与父...

  • python 管道

    python的管道通信是指进程间的通信,在此简单记录下管道通信的小程序: 管道的读端代码: 写端代码:

  • 进程间通信之有名管道

    1 有名管道 有名管道与无名管道的通信机制差不多,唯一不同在于,有名管道需要在文件系统中创建指定名称的管道文件,用...

  • Android 进程通信--Binder机制

    一、起源——为什么在Android中使用binder通信机制? linux中的进程通信 管道包含无名管道和有名管道...

  • Linux-C-day-3-进程间通信--FIFO/套接字

    FIFIO管道 通过命名管道通信,命名管道之间的通信读和写必须同时执行,否则就会阻塞,但是命名管道可以用于非亲缘进...

网友评论

      本文标题:管道通信与关闭

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