在已经启动后将变量传递给线程

时间:2011-01-26 14:57:16

标签: c++ boost boost-thread

我是C ++和new的新手。

作为硕士论文的一部分,我写了一个模拟统计模型的程序。在计算过程中,我使用boost :: thread来处理我的“质心向量”,以节省一些计算时间。到目前为止一切都很好。

现在,我想从boost :: thread中获取每个结果(每次一个元素)并将其传递给正在运行的线程,这将执行递归回归。

我的问题:

  • 如何将新的计算元素传递给现有线程?
  • 当我传递新元素时,我怎么能“唤醒”线程?
如果有人能指出我现有的例子,我会很高兴。

3 个答案:

答案 0 :(得分:2)

最简单的方法是使用std::queueboost::mutexboost::conditional_variable。在推送到队列调用conditional_variable.notify_one()之后,通过互斥锁包装对队列的任何访问。在消费者线程中等待conditional_variable,直到任何结果准备好,然后处理它。

答案 1 :(得分:0)

从另一个线程控制线程的一种行之有效的方法是通过队列与条件变量的组合来发送消息。不幸的是,boost :: thread没有提供标准的解决方案,并且在实现时有一些棘手的事情(可能的死锁,队列已满时的行为,使用多态消息......)

答案 2 :(得分:0)

您应该使用mutex和/ ro semaphore来同步线程和锁定变量以实现线程安全通信。请注意,进程中的所有threads共享相同的内存,因此您可以访问相同的数据,但必须以线程安全的方式执行此操作。

我不确定boost库是否实现了任何线程原语,但这是一个关于使用POSIX线程进行多线程编程的好教程 - http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html