草庐IT

GC_concurrent

全部标签

concurrency - 相同的 Golang 代码不同的输出,为什么?

我正在尝试执行来自golang.org的示例:http://tour.golang.org/#63我已经更改了代码以测试Gosched到底做了什么。*你可以看到输出是:hellohellohellohellohello但是当我将这些代码复制到我的MacOSX10.8(Go版本1.0.3)时,输出发生了变化:xxxxxx$去版本去版本go1.0.3xxxxxx$去运行goroutine.go你好世界你好世界你好世界你好世界你好世界根据这个answer,我应该使用runtime.GoSched,但实际上我不需要。所以我认为出了点问题。请帮我解决这个问题,非常感谢。

go - GC 收集时释放 C 指针

我有一个与C库接口(interface)的包。现在我需要在Go结构中存储指向C结构的指针typeAstruct{s*C.struct_b}显然,在GC收集该结构之前,需要释放该指针。我怎样才能做到这一点? 最佳答案 最好的办法是尽可能将C结构复制到受控内存中。varnsC.struct_bns=*A.sA.s=&ns显然,这并非在所有情况下都有效。C.struct_b可能太复杂或与仍在C代码中的东西共享。在这种情况下,您需要创建一个.Free()或.Close()方法(以更有意义的为准)并记录您的结构的用户必须调用它。在Go中,Fr

go - GC 收集时释放 C 指针

我有一个与C库接口(interface)的包。现在我需要在Go结构中存储指向C结构的指针typeAstruct{s*C.struct_b}显然,在GC收集该结构之前,需要释放该指针。我怎样才能做到这一点? 最佳答案 最好的办法是尽可能将C结构复制到受控内存中。varnsC.struct_bns=*A.sA.s=&ns显然,这并非在所有情况下都有效。C.struct_b可能太复杂或与仍在C代码中的东西共享。在这种情况下,您需要创建一个.Free()或.Close()方法(以更有意义的为准)并记录您的结构的用户必须调用它。在Go中,Fr

concurrency - 为什么这个程序在我的系统上终止而不是在 Playground 上?

考虑这个程序:packagemainimport"fmt"import"time"import"runtime"funcmain(){x:=0gofunc(){time.Sleep(500*time.Millisecond)x=1}()forx==0{runtime.Gosched()}fmt.Println("itworks!")}为什么它在本地终止而不是在Playground上终止??我的程序终止是否依赖于未定义的行为? 最佳答案 Goplayground使用了time.Sleep的特殊实现,旨在防止个别程序独占网站的后端资源。

concurrency - 为什么这个程序在我的系统上终止而不是在 Playground 上?

考虑这个程序:packagemainimport"fmt"import"time"import"runtime"funcmain(){x:=0gofunc(){time.Sleep(500*time.Millisecond)x=1}()forx==0{runtime.Gosched()}fmt.Println("itworks!")}为什么它在本地终止而不是在Playground上终止??我的程序终止是否依赖于未定义的行为? 最佳答案 Goplayground使用了time.Sleep的特殊实现,旨在防止个别程序独占网站的后端资源。

concurrency - `Go is a concurrent lang` 是什么意思?

Goisaconcurrentlang这是什么意思?这是否意味着它是C/C++/Java..的替代品? 最佳答案 Aconcurrentlanguage是一种具有并发语言结构的语言。Goisaconcurrentlanguage因为它有“goroutines”。ConcurrencyGoprovidesgoroutines,smalllightweightthreads;thenamealludestocoroutines.Goroutinesarecreatedwiththegostatementfromanonymousorna

concurrency - `Go is a concurrent lang` 是什么意思?

Goisaconcurrentlang这是什么意思?这是否意味着它是C/C++/Java..的替代品? 最佳答案 Aconcurrentlanguage是一种具有并发语言结构的语言。Goisaconcurrentlanguage因为它有“goroutines”。ConcurrencyGoprovidesgoroutines,smalllightweightthreads;thenamealludestocoroutines.Goroutinesarecreatedwiththegostatementfromanonymousorna

concurrency - 在 Go 中分配一个指针是原子的吗?

在Go中分配一个指针是原子的吗?我需要在锁中分配一个指针吗?假设我只想将指针分配给nil,并希望其他线程能够看到它。我知道在Java中我们可以为此使用volatile,但Go中没有volatile。 最佳答案 在go中唯一保证是原子的是sync.atomic中的操作。.所以如果你想确定你要么需要锁,例如sync.Mutex或使用其中一种原子原语。我不建议使用原子原语,因为你必须在任何使用指针的地方使用它们,而且它们很难正确使用。使用mutex是OK的风格——你可以定义一个函数来返回当前指针并非常容易地锁定,例如类似的东西import

concurrency - 在 Go 中分配一个指针是原子的吗?

在Go中分配一个指针是原子的吗?我需要在锁中分配一个指针吗?假设我只想将指针分配给nil,并希望其他线程能够看到它。我知道在Java中我们可以为此使用volatile,但Go中没有volatile。 最佳答案 在go中唯一保证是原子的是sync.atomic中的操作。.所以如果你想确定你要么需要锁,例如sync.Mutex或使用其中一种原子原语。我不建议使用原子原语,因为你必须在任何使用指针的地方使用它们,而且它们很难正确使用。使用mutex是OK的风格——你可以定义一个函数来返回当前指针并非常容易地锁定,例如类似的东西import

concurrency - 并发算法思考并在 Go 中学习

我有学习和实践标准、顺序的历史算法,我对它们已经相当满意了。但是,我对并发编程的经验几乎为零并同时思考。从顺序的角度来看,Go看起来非常有趣使用的语言。但是,除了Go教程和EffectiveGo已经假设了并发编程的先验知识,我真的不知道从哪里开始学习并发编程技能足够好,这样我就可以有效地使用Go的支持他们。谁能告诉我一个好的起点(除了教程)? 最佳答案 http://www.usingcsp.com/cspbook.pdf-这就是RobPike的建议。 关于concurrency-并发算