• go 面试题


    有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:

    A:1 2 3 4 1 2....

    B:2 3 4 1 2 3....

    C:3 4 1 2 3 4....

    D:4 1 2 3 4 1....

    上周五面试,面试给了一道go线程的题,当时时间想了一个很笨的方式来实现的,现在优化后附上代码,如果有更好的大牛可以在后面回复!!!

    package main
    
    import (
        "log"
        "os"
    )
    
    func main() {
    
        a, _ := os.OpenFile("./a.txt", os.O_WRONLY|os.O_APPEND, 0666)
        b, _ := os.OpenFile("./b.txt", os.O_WRONLY|os.O_APPEND, 0666)
        c, _ := os.OpenFile("./c.txt", os.O_WRONLY|os.O_APPEND, 0666)
        d, _ := os.OpenFile("./d.txt", os.O_WRONLY|os.O_APPEND, 0666)
        files := []*os.File{a, b, c, d}
        i := 0
        sign := make(chan int, 1)
        for i < 100 {
            i++
            sign <- 1
            go out1(files[0], sign)
            sign <- 1
            go out2(files[1], sign)
            sign <- 1
            go out3(files[2], sign)
            sign <- 1
            go out4(files[3], sign)
    
            files = append(files[len(files)-1:], files[:len(files)-1]...)
        }
        a.Close()
        b.Close()
        c.Close()
        d.Close()
    }
    
    
    
    func out2(f *os.File, c chan int) int {
        f.Write([]byte("2 "))
        // f.Close()
        log.Println(f.Name() + " write finish...")
        <-c
        return 2
    }
    func out3(f *os.File, c chan int) int {
        f.Write([]byte("3 "))
        // f.Close()
        log.Println(f.Name() + " write finish...")
        <-c
        return 3
    }
    func out4(f *os.File, c chan int) int {
        f.Write([]byte("4 "))
        // f.Close()
        log.Println(f.Name() + " write finish...")
        <-c
        return 4
    }
  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/LoveHe/p/9001813.html
Copyright © 2020-2023  润新知