有没有办法确保goroutine仅在特定的OS线程中运行?例如,当GUI操作必须在GUI线程中运行时,但是可能有多个goroutine运行GUI代码。GOMAXPROCS(1) 从技术上讲可以完成这项工作,但是这违背了多线程的目的。LockOSThread() 也可以工作,但是这也会阻止其他任何goroutine在该线程中运行。有没有办法做到这一点,还是所有需要相同线程的东西都必须在同一个goroutine中运行?
2 回答
小唯快跑啊
TA贡献1863条经验 获得超2个赞
据我所知,目前还不是。我认为执行此操作的“类似方式”将是编写一个运行在GUI线程中的Goroutine,并处理通过通道发送的其他goroutine的请求。例如,您可以让它从接受函数指针的通道中读取并执行这些函数。
月关宝盒
TA贡献1772条经验 获得超5个赞
你为什么要这样做?我相信runtime.LockOSThread()
如果要从使用线程本地存储的C代码创建库绑定是必要的。否则,只需让调度程序为您多路复用goroutine。
请注意,runtime.LockOSThread()
只有在调用之前,它才会阻止其他goroutine在该线程中运行runtime.UnlockOSThread()
。
- 2 回答
- 0 关注
- 291 浏览
添加回答
举报
0/150
提交
取消