问题标签 [boost-thread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
4118 浏览

c++ - C++ 线程问题 - 设置一个值以指示线程已完成

以下安全吗?

我是线程新手,我想将一个耗时的过程委托给我的 C++ 程序中的单独线程。使用 boost 库,我编写了如下代码:

thrd = new boost::thread(boost::bind(&myclass::mymethod, this, &finished_flag);

其中finished_flag 是我班的布尔成员。当线程完成时,它会设置值,我的程序的主循环会检查该值的变化。我认为这没关系,因为我只启动一个线程,并且该线程是唯一改变值的东西(除非在我启动线程之前初始化它)所以这可以吗,或者我错过了什么,并且需要使用锁和互斥锁等

0 投票
9 回答
18221 浏览

c++ - 杀死一个阻塞的 Boost::Thread

我正在编写一个阻止来自两个输入的应用程序istreams

从任何一个读取istream都是同步(阻塞)调用,因此,我决定创建两个Boost::threads 来进行读取。

这些线程中的任何一个都可以到达“结束”(基于接收到的一些输入),一旦到达“结束”,两个输入流都会停止接收。不幸的是,我不知道哪个会这样做。

因此,我不能join()同时处理两个线程,因为只有一个线程(无法预先确定哪个线程)将实际返回(解除阻塞)。

我必须以某种方式强制对方退出,但它在等待输入时被阻塞,所以它不能自己决定是时候返回(条件变量或其他)。

他们是一种方法吗:

  • 向 boost::thread 发送信号,或
  • 强制一个istream“失败”,或
  • 杀死一个 Boost::thread?

笔记:

  • 其中之一istreamscin
  • 我正在尝试重新启动该过程,因此我无法以禁止重置输入流的方式关闭它们。

编辑:

  • 我确实知道何时到达“结束”,并且我确实知道哪个线程已成功完成,哪些需要被杀死。这是我需要弄清楚的杀戮(或从 istream 读取的不同策略)。
  • 我需要两个线程正确退出和清理:(

谢谢!

0 投票
4 回答
470 浏览

c++ - 使用boost库在vc6中创建多线程应用程序?

是否可以使用 boost 库在 VC6 中创建多线程应用程序?如果可能的话,有哪些相关的教程。

0 投票
2 回答
763 浏览

c++ - 在 DLL 中使用时 Boost Spirit 崩溃

我在我的应用程序中使用 Boost.Spirit 和 Boost.Thread 库时遇到了崩溃。仅当我在主线程的进程生命周期内使用 Spirit 解析器时才会发生这种情况。

崩溃发生在退出时,似乎与 Spirit 解析器分配的线程特定存储的清理有关。它可能由于卸载 DLL 的顺序而崩溃,因为线程特定的内存是在已经卸载的 DLL 内分配的。然而,在应用程序本身退出之前,Boost.Thread DLL 不会被卸载。

有没有办法让我强制 Spirit 清除其线程特定的存储,例如当我收到进程分离通知时在我的 dll-main 中?

任何解决方案/提示将不胜感激。

PS!我的平台和设置:

  • 视觉工作室 2005
  • BOOST_ALL_DYN_LINK
  • BOOST_SPIRIT_THREADSAFE
0 投票
3 回答
10540 浏览

c++ - 使用 boost 库的多线程

希望同时多次调用一个函数。我希望使用线程来调用一个函数,该函数将充分利用机器的能力。这是一台8核的机器,我的要求是使用机器cpu从10%到100%以上。

我的要求是使用 boost 类。有什么方法可以使用 boost 线程或线程池库来完成此任务吗?或者其他方式来做到这一点?

另外,如果我每次都必须调用具有不同参数的多个函数(使用单独的线程),那么最好的方法是什么?[使用boost或不使用boost]以及如何?

以上不起作用,我不确定为什么?:-(

0 投票
2 回答
3398 浏览

multithreading - boost::thread: 运行优化版本时的段错误

boost:thread我上班有困难。在没有优化的情况下编译时运行良好:

但是使用优化编译的版本会崩溃

有谁知道可能是什么原因?

这是我正在使用的代码:

PS:我在 ubuntu linux 上使用 boost 1.32。

更新:

这是它在调试器中崩溃的地方(第 37 行是thread_2.join();我原始代码中的行):

这是我实际的两个功能:

谢谢你的帮助!

0 投票
1 回答
1563 浏览

synchronization - How to synchronize threads when polling for state changes with boost

In my application I want to be informed by events, that another application has been started or stopped. I have an existing API to the running application which cannot be changed to accomodate notification which would be the obvious solution.

What I have is a function call in the API (isRunning), so I decided to make a polling thread which polls the state through the API and informs my app.

My problem is now, the API call in the polling thread uses an object which is also used in my own application's main thread and I'd like to know how to be sure that I make it right :).

My idea would be to wrap each call to the API object (through an adapter e.g., see the second code block) with a mutex lock, so I'm sure the API is not called by my threads more than once.

Is this the right approach?

I'm using boost for threading/syncing (see code).

This is the polling thread:

These are some API calls from the main thread:

0 投票
5 回答
2829 浏览

c++ - tr1::hash for boost::thread::id?

我开始使用命名空间中的unordered_settr1来加速对普通(基于树的) STL 的访问map。但是,我想在 boost( boost::thread::id) 中存储对线程 ID 的引用,并意识到这些标识符的 API 是如此不透明,以至于您无法清楚地获得它的哈希值。

令人惊讶的是,boost 实现了部分tr1(包括hashunordered_set),但它没有定义能够散列线程 ID 的散列类。

查看文档,boost::thread::id我发现线程 ID 可以输出到流中,所以我的哈希解决方案是这样的:

也就是说,对其进行序列化,将哈希应用于结果字符串。但是,这似乎比实际使用 STL 效率低map<boost::thread::id>

所以,我的问题是:你找到更好的方法了吗?不强制一个hash<boost::thread::id>类的存在是否在 boost 和 tr1 中都存在明显的不一致?

谢谢。

0 投票
2 回答
486 浏览

c++ - 调用具有传递给应用程序的不同线程数的函数

我有一个函数,每次都需要用不同数量的线程调用(我正在做一些性能计算,所以需要知道性能何时开始恶化)。示例如下:

其中,nThreads:在命令行中给出的值

我的问题是,这是否会给我想要的结果,至于每次程序访问 for 循环时是否会使用“nThreads”调用“getTime”函数?还是我需要一些其他方法来找出相同的?

我真正想做的是:

(不确定以上哪个是正确的。)

getTime() 函数将以我从文本文件中获取的指定行数运行,并将每一行提供给我希望计算其性能的 api。但这与我的问题无关。

我希望每次调用具有不同线程数的函数并计算每个线程完成的时间。1 个线程所花费的总时间是多少,2 个线程完成所花费的总时间是多少,等等。

0 投票
6 回答
104077 浏览

c++ - boost shared_mutex(多次读取/一次写入)的示例?

我有一个多线程应用程序,它必须经常读取一些数据,并且偶尔会更新这些数据。现在,互斥锁可以安全地访问该数据,但它很昂贵,因为我希望多个线程能够同时读取,并且仅在需要更新时将它们锁定(更新线程可以等待其他线程完成) .

我认为这boost::shared_mutex是应该做的,但我不清楚如何使用它,也没有找到一个明确的例子。

有没有人有一个简单的例子可以用来开始?