【发布时间】:2014-11-05 16:27:43
【问题描述】:
我正在编写一个使用 GLEWMX 上下文的插件。该插件在线程 id (1) 下加载 GLEWMX 上下文。然后,当我要运行某些东西时,它会在线程 id (2) 下运行该任务。我可以访问两个线程 ID。
我是否应该使用 std:thread 将活动线程切换到线程 (1),以便我可以在该上下文中访问和运行事物?我该怎么做
【问题讨论】:
标签: c++ multithreading glew stdthread
我正在编写一个使用 GLEWMX 上下文的插件。该插件在线程 id (1) 下加载 GLEWMX 上下文。然后,当我要运行某些东西时,它会在线程 id (2) 下运行该任务。我可以访问两个线程 ID。
我是否应该使用 std:thread 将活动线程切换到线程 (1),以便我可以在该上下文中访问和运行事物?我该怎么做
【问题讨论】:
标签: c++ multithreading glew stdthread
是和不是。有些库确实被限制在单线程上运行,我假设 GLEWMX 就是其中之一。这确实意味着您不应该从线程 2 调用它。
然而,当您需要线程 1 完成某些事情时,您无法切换“活动线程”。在现代计算机上,无论如何都有多个活动线程,因此线程 2 处于活动状态这一事实甚至并不意味着线程 1 处于被动状态。
正确的解决方案是为线程 1 创建一个线程安全的工作队列。然后线程 2 可以将工作放入,线程 1 准备好后拾取工作。不幸的是,没有对此的标准库支持,您必须自己拼凑一个。在线程 1 中使用 std::condition_variable 和 .wait。
【讨论】: