登录
首页 >  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 

不错的围棋交换,不是吗?

现在,这有什么奇怪的chan struct{}?它是一个零大小的通道。我们只能用空结构(即:)填充它struct{}{}。它可以是 achan bool或其他,因为我们不使用频道的内容。重要的一点是,我们使用quit通道来通知我们的 goroutine 中的无限循环,该停止了。

select语句用于捕获来自通道的内容。这是一个阻塞语句(它将停止执行,直到将某些内容放入 a 调查的通道之一case),除非您放置一个default语句。在这种情况下,每次select执行时,如果在里面放了东西,循环就会中断quit,否则do_stuff()就会被调用。如果您参加过Go Tour,您已经知道这一点。

其他很酷的并发模式可以在Go 博客上找到。

最后,为了更有趣,您可以do_stuff使用 s 要求您的函数定期执行Ticker,而不是消耗 100% CPU,如下所示:

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 

在这里,select是阻塞的,因为我们删除了default语句。

以上就是《我如何杀死一个 goroutine》的详细内容,更多关于golang的资料请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>