我尝试用并行goroutines编写一个复杂的程序。这是我的第一个带有通道的程序;)每个goroutine返回一个数组,不幸的是,结果是“随机”。如果我运行该程序10次,则有10种不同的结果:(
这是我程序的过度简化,结果很好(也许是因为它太简单了),但是当我使用-race参数运行它时,有4个数据竞争。
我试图有一个close()函数,但是没有用。
您能帮我发现错误吗?提前非常感谢您!
package main
import "fmt"
import "sync"
import "strconv"
func cat_strings(a int, b string) []string{
var y []string
j := strconv.Itoa(a)
y = append(y, j)
y = append(y, b)
return y
}
func main() {
var slice []string
var wg sync.WaitGroup
var x []string
queue := make(chan []string, 10)
wg.Add(10)
for i := 0; i < 10; i++ {
go func(i int) {
defer wg.Done()
x = cat_strings(i, "var")
queue <- x
}(i)
}
//close(queue)
go func() {
defer wg.Done()
for t := range queue {
slice = append(slice, t...)
}
}()
wg.Wait()
fmt.Println(slice)
}
此修复程序有两个部分,不要在goroutines之间共享切片,然后在中queue
同步范围main
。
import (
"fmt"
"strconv"
"sync"
)
func cat_strings(a int, b string) []string {
var y []string
j := strconv.Itoa(a)
y = append(y, j)
y = append(y, b)
return y
}
func main() {
var slice []string
var wg sync.WaitGroup
queue := make(chan []string, 10)
wg.Add(10)
for i := 0; i < 10; i++ {
go func(i int) {
defer wg.Done()
queue <- cat_strings(i, "var")
}(i)
}
go func() {
wg.Wait()
close(queue)
}()
for t := range queue {
slice = append(slice, t...)
}
fmt.Println(slice)
}
没有x
必要在goroutine之间共享额外的片段。如果每个goroutine需要另一个切片,则为每个切片定义一个新切片。共享单个片总是需要额外的同步。
另一场比赛是在从追加queue
到slice
切片的goruoutine
和决赛之间fmt.Println
。没有理由并发执行这些操作,因为您不希望在读取所有值之前就进行打印,因此请在打印最终值之前完全完成for-
range循环。
只有在必要时,我才尝试在“httpRequestBegin”管道中执行一些操作。我的处理器在Sitecore解析用户后执行(processor type=“Sitecore.Pipelines.HttpRequest.UserResolver,Sitecore.Kernel”),因为如果Sitecore无法首先解析用户,我也在解析用户。 稍后,我想在管道“insertRenderings”中添加一
问题内容: 我的GUI中有多个组合框,所有组合框都需要数据。此数据将随机更改,因此需要一种快速的方法来保持所有值同步。我遇到了DefaultComboBoxModel,它实际上非常合适。唯一的事情是,我需要组合框彼此独立- 意思是:如果我在一个上选择一个值,则所有其他框都不应更改。我做了一些研究,并阅读了标准的Java教程,但没有一个告诉我如何使用DefaultComboBoxModel来实现这一
(要求Workerman版本>=3.3.0) 源码地址:https://github.com/walkor/GlobalData 注意 GlobalData需要Workerman版本>=3.3.0 下载安装 可以使用composer安装,或者直接下载zip包https://github.com/walkor/GlobalData/archive/master.zip 。 原理 利用PHP的__se
本章介绍了权限网站以及如何进行分析云授权,需要授权的用户请仔细阅读账户间授权的限制条件,如遇到无法授权的情况,可发送邮件至analytics@baidu.com,会有专人协助您完成授权操作。 分析云下载是指导出分析云相关报告的分析结果,导出次数上限与分析云版本相关,如需提升上限,也可通过邮件联系我们。 数据共享包含以下内容: 报告授权 分析云下载
问题内容: 我需要在两个(或更多个)组合框之间共享数据,但是我想独立选择元素。例如,如果我在第一个comboBox中选择Object1,则我的第二个ComboBox也选择Object1,因为它们具有相同的模型(DefaultComboBoxModel,并且此模型还管理所选的对象)。但是我不想要这种行为。我想在我的comboBoxes中独立选择对象。当我在第一个comboBox中选择对象时,我的第二
我有我导出到数据uri图像的HTML画布。现在我想通过点击我页面上的自定义链接,在Facebook时间线上尽可能轻松地分享这张图片(无需创建FB应用程序和身份验证令牌)。 我试过这样的方法: 图像生成: 共享链接: 当我点击链接Safari我得到 如何通过Facebook共享者URL(或其他方式)轻松共享数据uri图像? 谢谢你的回答!