有沒有辦法確保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 關注
- 329 瀏覽
添加回答
舉報
0/150
提交
取消