8

有没有办法确保 goroutine 只在特定的 OS 线程中运行?例如,当 GUI 操作必须在 GUI 线程中运行,但可能有多个 goroutines 运行 GUI 代码时。

GOMAXPROCS(1)在技​​术上完成这项工作,但这违背了多线程的目的。

LockOSThread()也可以,但这也阻止了任何其他 goroutine 在该线程中运行。

有没有办法做到这一点,或者需要同一个线程的所有东西都必须在同一个 goroutine 中运行?

4

2 回答 2

8

据我所知,目前没有。我认为这样做的“go-like”方式是编写一个在 GUI 线程中运行的 Goroutine,并为来自其他 goroutine 通过通道发送的请求提供服务。例如,您可以让它从接受函数指针的通道中读取,并执行这些函数。

于 2009-12-10T12:19:42.213 回答
3

你为什么要这样做?runtime.LockOSThread()如果您从使用线程本地存储的 C 代码创建库绑定,我认为这是必要的。否则,只需让调度程序为您多路复用 goroutine。

请注意,runtime.LockOSThread()只有在您调用runtime.UnlockOSThread().

于 2009-12-18T14:47:48.093 回答