- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为创建4个goroutine的程序运行了以下代码,根据输出我得到了我的代码似乎正常运行但出现错误的信息:-fatal error: all goroutines are asleep - deadlock!
我添加了4个WaitGroup,在完成每个goroutine时,我都做了wg.Done(),但我仍然不明白为什么会发生这种错误。
我的代码:
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func sort(x []int) {
fmt.Println("Initial: ", x)
var i int
var j int
for i = 0; i < len(x); i++ {
for j = 0; j < len(x)-i-1; j++ {
if x[j] > x[j+1] {
temp := x[j+1]
x[j+1] = x[j]
x[j] = temp
}
}
}
fmt.Println("Sorted: ", x)
wg.Done()
}
func main() {
fmt.Println("Enter an array of number preferrably in multiples of 4:- ")
inputSlice := make([]int, 0, 1)
for true {
var n int
fmt.Print("Enter the number: ")
fmt.Scan(&n)
inputSlice = append(inputSlice, n)
fmt.Print("Do you want to continue adding numbers (y/n) ? ")
var char string
fmt.Scan(&char)
if char == "n" || char == "N" {
if len(inputSlice)%4 == 0 {
break
} else {
fmt.Println("Please enter more ", 4-len(inputSlice)%4, " numbers")
}
}
fmt.Println("Test: ", n)
fmt.Println("Input: ", char)
}
fmt.Println("Initial: ", inputSlice)
size := len(inputSlice)
wg.Add(4)
div := (size / 4)
sort1 := inputSlice[:div]
go sort(sort1)
sort2 := inputSlice[div:(div * 2)]
go sort(sort2)
sort3 := inputSlice[(div * 2):(div * 3)]
go sort(sort3)
sort4 := inputSlice[(div * 3):]
go sort(sort4)
wg.Wait()
final := make([]int, 0, 1)
for _, val := range sort1 {
final = append(final, val)
}
for _, val := range sort2 {
final = append(final, val)
}
for _, val := range sort3 {
final = append(final, val)
}
for _, val := range sort4 {
final = append(final, val)
}
sort(final)
fmt.Println("Sorted: ", final)
}
我的输出:
Enter an array of number preferrably in multiples of 4:-
Enter the number: 1
Do you want to continue adding numbers (y/n) ? y
Test: 1
Input: y
Enter the number: 2
Do you want to continue adding numbers (y/n) ? y
Test: 2
Input: y
Enter the number: 3
Do you want to continue adding numbers (y/n) ? y
Test: 3
Input: y
Enter the number: 4
Do you want to continue adding numbers (y/n) ? n
Initial: [1 2 3 4]
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
C:/Deepan/Text Books/NITK - Coursera/GoLang/Course3/week3.go:61 +0x658
exit status 2
最佳答案
实际上,我没有遇到死锁,但遇到了另一个错误:panic: sync: negative WaitGroup counter
。
您将4添加到等待组:
wg.Add(4)
然后在4个启动的goroutines中的
wg.Done()
中调用
sort()
。没关系。
sort()
中也有一个“最终”
main
调用:
sort(final)
在
wg.Done()
内部也将被称为:
panic: sync: negative WaitGroup counter
一个“简单”的解决方法是在调用
sort
之前将一个添加到等待组:
wg.Add(1)
sort(final)
关于go - sync.WaitGroup.Done()实际如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62832004/
我正在编写一个 google 内容脚本,我的程序需要对服务器进行大约 30 个 AJAX 调用。我将 JQuery 的 .when 函数与 .apply 结合使用,将数组传递给 .when 函数。我也
编辑 - 请查看底部的注释,了解为什么我不认为这是一个重复的问题 使用 jquery 3.2.1 和 Bootstrap 3.3.7 我的部分应用程序具有以下流程: 用户单击 ID 为 #notifi
请解释 done() 方法和作为参数传递给函数的 done 关键字之间的区别? it("qwerty",function(done){ ------ ------ done(); });
我有一个 EditText,我想听听用户是否按下键盘上的“完成”按钮,我还想在用户没有按下软键盘上的“完成”按钮时清除 EditText,我该怎么做? 最佳答案 要检查用户是否按下了软键盘的“完成”按
我正在使用https://api.jquery.com/jquery.when/中描述的方法进行一系列 ajax 调用。 (基于该页面中的示例 $.when( $.ajax( "/page1.php"
我正在学习 bash,我在互联网上找到了一个教程,说它们是相同的: while read -r line; do ... done foo=$line # assume $line
Mozilla 的 JavaScript 文档的 Promises(参见 API page)和 jQuery 的 Promises(参见 API page)之间有什么区别? Mozilla 的prom
首先我想说我是 jQuery 新手,我怀疑我只是做了一些愚蠢的事情,所以希望这对某人来说会很简单。 我正在尝试向我的网站添加滑动移动子菜单。我想要一种 Accordion 效果,如果我单击一个父链接,
我的 JavaScript 函数之一出现问题。在我的网页中,我有多个 $.ajax 调用,后跟 .done() ,它们似乎都有效,除了一个。有人能发现错误吗? me.AcquireProject =
C 中是否有语法让编译器知道某个变量已完成并且此后将不再使用,从而可能释放寄存器?我宁愿不使用函数调用,因为它们很昂贵。 我知道我可以重用一个变量,但这会导致歧义(这个变量是什么意思?)。 例子: f
这个问题已经有答案了: How do you work with an array of jQuery Deferreds? [duplicate] (4 个回答) 已关闭 6 年前。 我有一个这样的
C 中是否有语法让编译器知道某个变量已完成并且此后将不再使用,从而可能释放寄存器?我宁愿不使用函数调用,因为它们很昂贵。 我知道我可以重用一个变量,但这会导致歧义(这个变量是什么意思?)。 例子: f
假设任何时候在registerChan上最多有两个元素(工作人员地址)。然后由于某种原因,以下代码不会在最后两个goroutines中调用wg.Done()。 func schedule(jobNam
$(document).ready(function(){ $('.msg-buttons :button').on("click",function(event) { var
我试图在请求完成后隐藏 ajax 加载器,但是 done() 回调在 blur() 事件之后、在提出请求。我让 Controller Action 休眠 5 秒钟,以确保情况确实如此,事实确实如此。我
我在使用 jQuery 时遇到 $.when().done() 函数的一些问题。有人可以帮忙吗?当我有 ajax 调用和非 ajax 调用方法时,即使我使用 $.when().done() 也会调用非
我有一个小脚本,它使用函数 getJSON 将 json 字符串保存到 var。之后我想用内容创建一些 div。 为此,我为猫(类别)创建了一个 each。在第二个中,当 repo 适合猫时,它也应该
以下代码有一个错误的语法错误。可能是因为我正在使用“for”之类的东西。 $.when( for (var i=0; i < 5; i++) { $.getScript( "'
我在 javascript (jquery) 中有这段代码 function getTopLevelId(gender) { var catId = $.ajax({
在我的代码中,除了 DONE 之外,所有的键都可以正常工作,所以告诉我关于 DONE 键的建议。我的代码如下: 我的mainActivity代码如下 package nl.fampennings.ke
我是一名优秀的程序员,十分优秀!