强制goroutine进入同一线程

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

GOMAXPROCS(1) 从技术上讲可以完成这项工作,但是这违背了多线程的目的。

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

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


子衿沉夜
浏览 331回答 2
2回答

小唯快跑啊

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

月关宝盒

你为什么要这样做?我相信runtime.LockOSThread()如果要从使用线程本地存储的C代码创建库绑定是必要的。否则,只需让调度程序为您多路复用goroutine。请注意,runtime.LockOSThread()只有在调用之前,它才会阻止其他goroutine在该线程中运行runtime.UnlockOSThread()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go