返回顶部
首页 > 资讯 > 精选 >如何将 WaitGroup 传递给顺序函数调用?
  • 471
分享到

如何将 WaitGroup 传递给顺序函数调用?

2024-02-06 05:02:45 471人浏览 独家记忆
摘要

问题内容 我有一个可以在单独的 Goroutine 中顺序或并发调用的函数。 我想确保函数在主 goroutine 完成之前完全执行,因此我将 *sync.waitgroup 参数传递

问题内容

我有一个可以在单独的 Goroutine 中顺序或并发调用的函数。

我想确保函数在主 goroutine 完成之前完全执行,因此我将 *sync.waitgroup 参数传递给函数。现在,在某些地方该函数将被顺序调用。

我可以将 nil waitgroup 传递给函数,如下所示:

func my_func(wg *sync.WaitGroup){
   if wg != nil{
   defer wg.Done()
   }
   // do the task
}

func main(){
my_func(nil) // sequential call

wg := sync.WaitGroup{}
wg.Add(1)
go my_func(&wg)  // concurrent call
wg.Wait()
}

有没有更好的方法来实现这个目标?


正确答案


你的 my_func() 不应该知道/不应该关心它是如何执行的(无论是否在新的 goroutine 中)。因此,为此您不应该传递 wg。不要强制并发或非并发使用您的 api,让您的包的用户决定他们希望如何调用它。

如果有人希望同时运行它,在一个新的 goroutine 中,可以在 my_func()外部处理 my_func(),如下所示:

wg.add(1)
go func() {
    defer wg.done()
    my_func()
}()

这也使得可以在将在 wg.done() 调用之前执行的函数调用之前/之后放置更多代码:

wg.add(1)
go func() {
    defer wg.done()

    // other code before
    my_func()
    // other code after
}()

另请注意,如果您在很多地方都有此功能,则可以创建一个辅助函数来负责 goroutine 启动和 waitgroup 处理:

func launchmyfunc(wg *sync.waitgroup) {
    go func() {
        defer wg.done()

        my_func()
    }()
}

您还可以创建一个接受任意无参数无返回函数的帮助器:

func launchfunc(wg *sync.waitgroup, f func()) {
    go func() {
        defer wg.done()

        f()
    }()
}

使用上面的帮助器,您可以这样做:

wg.Add(1)
launchMyFunc(wg)

// or
wg.Add(1)
launchFunc(wg, my_func)

以上就是如何将 WaitGroup 传递给顺序函数调用?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 如何将 WaitGroup 传递给顺序函数调用?

本文链接: https://lsjlt.com/news/561214.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何将 WaitGroup 传递给顺序函数调用?
    问题内容 我有一个可以在单独的 goroutine 中顺序或并发调用的函数。 我想确保函数在主 goroutine 完成之前完全执行,因此我将 *sync.waitgroup 参数传递...
    99+
    2024-02-06
  • 如何将参数传递给 PHP 函数?
    通过调用函数时指定值,可向 php 函数传递参数。具体步骤如下:声明接受参数的函数。在函数调用时指定参数值。参数类型可以是基本类型、数组、对象或资源。 如何将参数传递给 PHP 函数?...
    99+
    2024-04-10
    php函数 参数传递
  • 将方法参数传递给函数
    在PHP开发中,将方法参数传递给函数是一个常见的需求。通过将参数传递给函数,我们可以在函数内部对参数进行操作和处理,从而实现更加灵活和可复用的代码。在本文中,php小编百草将为大家介绍...
    99+
    2024-02-14
  • PHP 函数的递归调用会如何影响执行顺序?
    php 函数递归调用影响执行顺序,遵循后进先出栈结构:函数递归调用自身时入栈。栈中最后一个函数先执行。函数返回时出栈,调用函数继续执行。 PHP 函数的递归调用如何影响执行顺序 PHP...
    99+
    2024-04-17
    php 递归调用
  • 将指针传递给 go defer 函数不起作用
    在 PHP 编程中,指针传递给 go defer 函数时可能出现不起作用的情况。PHP 中的指针用于存储变量的内存地址,通过传递指针,可以在函数内部修改原始变量的值。然而,当将指针传递...
    99+
    2024-02-13
  • 如何使用Html.RenderPartial()将任意数据传递给ASP.NET MVC
    要将任意数据传递给ASP.NET MVC视图中的Html.RenderPartial()方法,可以使用ViewData或ViewBa...
    99+
    2023-09-27
    ASP.NET
  • 如何使用 C++ 函数指针传递和调用函数?
    函数指针允许将函数作为参数传递,使函数调用更加灵活。您可以声明函数指针、传递参数,并通过指针运算符调用指向的函数。通过函数指针可以实现动态调度、排序算法选择等高级功能。 如何使用 C+...
    99+
    2024-04-17
    c++ 函数指针
  • vue如何将函数作为参数传递
    在vue中将函数作为参数传递的方法:1.新建vue.js项目;2.定义函数用于测试;3.封装函数;4.使用this.clickEnter方法做参数传递;具体步骤如下:首先,在vue-cli中创建一个vue.js项目;vue create p...
    99+
    2024-04-02
  • 如何将 PHP 函数视为参数传递?
    php 中可将函数作为参数传递,实现方式如下:使用 function_to_invoke($param_function, ...$args) 语法,其中 function_to_inv...
    99+
    2024-04-10
    函数 php
  • 从存储桶将多个文件传递给 exec.Command 调用
    亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《从存储桶将多个文件传递给 exec.Command 调用》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有...
    99+
    2024-04-05
  • Vue 中怎么将函数作为props传递给组件
    这篇文章将为大家详细讲解有关Vue 中怎么将函数作为props传递给组件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。向组件传入函数获取一个函数或方法并将其...
    99+
    2024-04-02
  • ajax如何实现回调函数参数传递
    这篇文章主要介绍ajax如何实现回调函数参数传递,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 属性方法是可以带参数: 复制代码 代码如下:functi...
    99+
    2024-04-02
  • 使用shell传参并将参数传递给sql文件
    本篇文章为大家展示了使用shell传参并将参数传递给sql文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如下所示:调用代码:   sh /tmp/t.sh 20160808&...
    99+
    2023-06-09
  • 如何将 `ApplyConfig` 传递给 `hashicorp / terraform-exec` 中的 `tf.Apply()`?
    php小编柚子为您解答如何将 `ApplyConfig` 传递给 `hashicorp / terraform-exec` 中的 `tf.Apply()`。在使用 `hashicorp...
    99+
    2024-02-09
  • 如何在不定义数组大小的情况下将数组传递给 GO 函数?
    本篇文章给大家分享《如何在不定义数组大小的情况下将数组传递给 GO 函数?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握...
    99+
    2024-04-05
  • PHP 函数的参数传递顺序对执行有影响吗?
    对于 php 函数,传递参数的顺序会影响某些函数的执行。这适用于以下函数:str_split():用于拆分字符串,需要按顺序传递参数(字符串、长度)。shuffle():用于随机排序数组...
    99+
    2024-04-18
    php 参数传递顺序
  • 揭秘 PHP 函数调用中的值传递和引用传递
    php 中函数调用既可使用值传递也可使用引用传递。默认情况下为值传递,函数接收参数的副本,对其修改不影响原始值。而引用传递通过在参数前加 & 符号来声明,函数直接修改传递...
    99+
    2024-04-16
    引用传递 值传递
  • oracle递归函数如何调用
    在Oracle中,可以使用WITH语句来定义递归查询,也可以使用递归子查询来调用递归函数。1. 使用WITH语句定义递归查询:```...
    99+
    2023-09-26
    oracle
  • Python如何调用C++传递numpy数据
    这篇文章主要为大家展示了“Python如何调用C++传递numpy数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python如何调用C++传递numpy数据”这篇文章吧。1.C++ 代码De...
    99+
    2023-06-29
  • PHP 函数的嵌套调用如何影响执行顺序?
    php 中函数的嵌套调用遵循特定的执行顺序,外部函数首先执行,其次是按定义顺序调用的嵌套函数,避免过度嵌套以确保程序可读性和维护性。 PHP 函数的嵌套调用及其对执行顺序的影响 在 P...
    99+
    2024-04-18
    php 函数嵌套
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作