我正在编写一个使用GLEWMX上下文的插件。该插件在线程id(1)下加载GLEWMX上下文。然后,当我运行某些东西时,它在线程id(2)下运行该任务。我可以访问两个线程ID。
我应该使用std:thread将活动线程切换到线程(1),这样我就可以在该上下文中访问和运行东西了吗?我该怎么做
答案 0 :(得分:1)
是和否。有些库确实限于在单个线程上运行,我假设GLEWMX就是其中之一。这确实意味着你不应该从线程2中调用它。
然而,当您需要线程1完成的任务时,您无法切换"活动线程"。在现代计算机上,无论如何都有几个活动线程,因此线程2处于活动状态这一事实并不意味着线程1是被动的。
正确的解决方案是为线程1创建线程安全工作队列。然后,线程2可以将工作放入,线程1在准备就绪时选择工作。不幸的是,没有标准图书馆支持,你必须自己拼凑一个。在主题1中使用std::condition_variable
和.wait
。