为了账号安全,请及时绑定邮箱和手机立即绑定

强制goroutine进入同一线程

强制goroutine进入同一线程

Go
子衿沉夜 2021-04-07 15:14:41
有没有办法确保goroutine仅在特定的OS线程中运行?例如,当GUI操作必须在GUI线程中运行时,但是可能有多个goroutine运行GUI代码。GOMAXPROCS(1) 从技术上讲可以完成这项工作,但是这违背了多线程的目的。LockOSThread() 也可以工作,但是这也会阻止其他任何goroutine在该线程中运行。有没有办法做到这一点,还是所有需要相同线程的东西都必须在同一个goroutine中运行?
查看完整描述

2 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

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


查看完整回答
反对 回复 2021-04-26
?
月关宝盒

TA贡献1772条经验 获得超5个赞

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

请注意,runtime.LockOSThread()只有在调用之前,它才会阻止其他goroutine在该线程中运行runtime.UnlockOSThread()


查看完整回答
反对 回复 2021-04-26
  • 2 回答
  • 0 关注
  • 291 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信