强制goroutine进入同一个线程

时间:2009-12-10 11:05:29

标签: go goroutine

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

GOMAXPROCS(1)从事技术工作,但这违背了多线程的目的。

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

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

2 个答案:

答案 0 :(得分:8)

据我所知,目前不是。我认为执行此操作的“类似”方法是编写一个在GUI线程中运行的Goroutine,以及通过通道发送的其他goroutine的服务请求。例如,您可以从接受函数指针的通道读取它,并执行这些函数。

答案 1 :(得分:3)

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

请注意runtime.LockOSThread()只会阻止其他goroutine在该线程中运行,直到您调用runtime.UnlockOSThread()