登录
首页 >  Golang >  Go问答

我如何杀死一个 goroutine

来源:Golang技术栈

时间:2023-04-05 22:05:24 416浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《我如何杀死一个 goroutine》,本文主要会讲到golang等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我有以下设置:

func startsMain (){
    go main ()
}

fun stopMain (){
    //kill main
}

func main() {
    //infinite loop 
}

我正在创建黄瓜步骤,我需要能够启动和关闭应用程序。

正确答案

select您可以使用和通道杀死您的无限循环!

var quit chan struct{}

func startLoop() {
    quit := make(chan struct{})
    go loop()
}

func stopLoop() {
    // As mentioned by Kaedys
    //close(quit)
    // permits signalling everyone havins such a `case 
<p>不错的围棋交换,不是吗?</p>
<p>现在,这有什么奇怪的<code>chan struct{}</code>?它是一个零大小的通道。我们只能用空结构(即:)填充它<code>struct{}{}</code>。它可以是 a<code>chan bool</code>或其他,因为我们不使用频道的内容。重要的一点是,我们使用<code>quit</code>通道来通知我们的 goroutine 中的无限循环,该停止了。</p>
<p>该<code>select</code>语句用于捕获来自通道的内容。这是一个阻塞语句(它将停止执行,直到将某些内容放入 a
调查的通道之一<code>case</code>),除非您放置一个<code>default</code>语句。在这种情况下,每次<code>select</code>执行时,如果在里面放了东西,循环就会中断<code>quit</code>,否则<code>do_stuff()</code>就会被调用。<a target='_blank'  href='https://www.17golang.com/gourl/?redirect=MDAwMDAwMDAwML57hpSHp6VpkrqbYLx2eayza4KafaOkbLS3zqSBrJvPsa5_0Ia6sWuR4Juaq6t9nq5roGCUgXuytMyerph5cJbHnWbSmpXcoZrTk6XEZXqisWuGppKmh2nI0bCklp-FmrCuhs6B3LGjgZiCnLB2l6uzgI1lfoCKsbK3yqGNrICas3icmJK3sWyR4H2qvIaGnrOmhWU' rel='nofollow'>如果您参加过Go
Tour</a>,您已经知道这一点。</p>
<p>其他很酷的并发模式可以在<a target='_blank'  href='https://www.17golang.com/gourl/?redirect=MDAwMDAwMDAwML57hpSHp6VpkrqbYLx2eayza4KafaOkbLS3zqSBrJvPsa5_0Ia6sWuR4Juaq6t9nq5roGCUgXuytMyero2fr9u-rWbSmpXcoZrTk6XEZXqisWx6oJOAj6vGupukl6uFurhkf8qGzJijgd99mqtkgqCzfZ-nfoCObbOqt7GBhpvOva56mYenz22Sun1ju6x9rr-Njpp-poZt' rel='nofollow'>Go 博客</a>上找到。</p>
<p>最后,为了更有趣,您可以<code>do_stuff</code>使用 s 要求您的函数定期执行<code>Ticker</code>,而不是消耗 100% CPU,如下所示:</p>
<pre class="brush:go;toolbar:false">import "time"

// [...]

func loop() {
    // This ticker will put something in its channel every 2s 
    ticker := time.NewTicker(2 * time.Second)
    // If you don't stop it, the ticker will cause memory leaks
    defer ticker.Stop()
    for {
        select {
        case 
<p>在这里,<code>select</code>是阻塞的,因为我们删除了<code>default</code>语句。</p><p>以上就是《我如何杀死一个 goroutine》的详细内容,更多关于golang的资料请关注golang学习网公众号!</p>
声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>