我知道在Go中,runtime.LockOSThread()会将goroutine绑定到一个OS线程,并且不允许其他goroutine在该线程中执行。儿童goroutine也是这样吗?
runtime.LockOSThread()
例如:
runtime.LockOSThread() go func() { go func() { // Do something }() // Do something }()
这两个goroutine是在单个和排他的OS线程中执行还是仅在第一个线程中执行?
文档的runtime.LockOSThread说:
runtime.LockOSThread
LockOSThread 将调用goroutine连接 到其当前的操作系统线程。在调用goroutine退出或调用UnlockOSThread之前,它将始终在该线程中执行, 并且其他goroutine不能执行 。
(强调我的)
这意味着,如果Go的某个实现实现了您的要求,那将是错误的。
需要说明的是:goroutine是否保留了一个线程,而另一个goroutine在同一线程上执行了;那是错的。