首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go语言中关键部分的交替执行

Go语言中关键部分的交替执行
EN

Stack Overflow用户
提问于 2013-09-06 09:29:18
回答 1查看 400关注 0票数 2

我有两个围棋套路:

代码语言:javascript
复制
func f1 { 
    ... some code 

    // critical section 1 (CS1)     
        ... critical section code                                   
    // end criticla section 1

    ... more code
}

func f2 { 
    ... some code 

    // critical section 2 (CS2)    
        ... critical section code                                
    // end criticla section 2

    ... more code
}

func main() {
   go f1()
   go f2()
}

如何确保这些例程中的关键部分始终交替执行?

换句话说,CS1只应该在CS2之后执行,反之亦然: CS1、CS2、CS1、CS2、CS1等等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-06 09:45:50

如果你是在不同的峡谷运行功能,我建议双通道。就像传个小屁球一样。每个函数都有一个听的通道,还有一个通道,一旦关键部分完成,它们就会传递到球上。然后,您可以确定,无论何时调用它们,它们总是交替运行。

此模式还允许您使用f3、f4 .也是。

代码语言:javascript
复制
package main

func f1(do chan bool, next chan bool) {
        //... some code

        <-do // Waits for the ball
        // critical section 1 (CS1)
        //... critical section code
        // end criticla section 1
        next <- true // Pass on the ball to the next function

        //... more code
}

func f2(do chan bool, next chan bool) {
        //... some code

        <-do
        // critical section 2 (CS2)
        //... critical section code
        // end criticla section 2
        next <- true

        //... more code
}

func main() {
    cf1 := make(chan bool, 1)
    cf2 := make(chan bool, 1)
    cf1 <- true // Let cf1 start with the ball

    go f1(cf1, cf2)
    go f2(cf2, cf1)

    // Wait here, otherwise it will just exit
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18654457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档