一尘不染

runtime.LockOSThread是否允许子goroutine在同一OS线程中运行?

go

我知道在Go中,runtime.LockOSThread()会将goroutine绑定到一个OS线程,并且不允许其他goroutine在该线程中执行。儿童goroutine也是这样吗?

例如:

runtime.LockOSThread()
go func() {
    go func() {
        // Do something
    }()
    // Do something
}()

这两个goroutine是在单个和排他的OS线程中执行还是仅在第一个线程中执行?


阅读 335

收藏
2020-07-02

共1个答案

一尘不染

文档runtime.LockOSThread说:

LockOSThread 将调用goroutine连接
到其当前的操作系统线程。在调用goroutine退出或调用UnlockOSThread之前,它将始终在该线程中执行,
并且其他goroutine不能执行

(强调我的)

这意味着,如果Go的某个实现实现了您的要求,那将是错误的。

需要说明的是:goroutine是否保留了一个线程,而另一个goroutine在同一线程上执行了;那是错的。

2020-07-02