问题标签 [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 投票
3 回答
947 浏览

c++ - boost::threads 执行顺序

我对连续创建的线程的执行顺序有疑问。这是代码。

每次将一个字母(从 A 到 D)和一个genereaion id (i) 作为线程传递给 SomeWork 方法。我不关心字母之间的执行顺序,但对于一个特定的字母,比如 A,如果 x < y,Ax 必须在 Ay 之前开始。代码的随机输出的随机部分是:

怎样才能避免这种情况?
谢谢。


我使用条件变量解决了这个问题。但我稍微改变了问题。解决方案是跟踪 for 循环的索引。所以每个线程都知道它什么时候不工作。但就这段代码而言,我还想问另外两件事。
首先,在我的计算机上,当我将 for 循环索引设置为 350 时,我遇到了访问冲突。310 是循环数,没问题。所以我意识到要生成最大数量的线程。我怎样才能确定这个数字?其次,在 Visual Studio 2008 中,发布版本的代码表现出非常奇怪的行为。不使用条件变量(第 1 到第 3 行被注释掉),线程是有序的。怎么会这样?

这是代码:

0 投票
3 回答
412 浏览

c++ - 如果我不加入发布版本中的“破坏”线程怎么办?

在许多情况下,我的类就像活动对象(有一个线程)。并且为了避免访问冲突,我总是必须等待加入析构函数。这通常不是问题。

然而,想象一个带有一些错误(死锁、活锁等)的发布版本会导致join()无法按时返回或根本无法返回,这将导致整个应用程序在等待不再使用的对象时变得无法正常工作。如果这种情况发生在客户身上,它就会成为一个问题。

我宁愿收到问题通知并跳过加入。并泄漏线程及其资源。

跳过连接可以通过这样的方式来实现。

这是一个好主意吗?还是有更好的策略?

0 投票
2 回答
4272 浏览

multithreading - 如何使用 boost::thread 互斥锁来同步写访问?

Boost::Thread我有一个关于and的新手问题Mutex

我想启动以下许多并行实例Worker,并且它们都写入相同的std::vector

我知道 Worker 必须vec在写入之前锁定并在完成后解锁它(因为所有 Worker 都写入同一个向量)。但是我该如何表达呢?

0 投票
4 回答
1241 浏览

c++ - 提升线程:是否可以在移动到另一个线程之前限制线程的运行时间

我有一个带有线程和诊断线程的程序。主线程基本上是一个while(1)执行各种任务的循环。其中一项任务是为诊断引擎提供有关系统的信息,然后稍后再检查(即在下一个循环中)以查看是否有任何问题需要处理。主循环的迭代不应超过 0.1 秒。如果一切正常,那么诊断引擎几乎不会花时间返回答案。但是,如果出现问题,诊断引擎可能需要几秒钟来隔离问题。出于这个原因,每次诊断引擎接收到新信息时,它都会启动一个新的诊断线程。

我们遇到的问题是诊断线程正在从主线程中窃取时间。实际上,即使我们有两个线程,主线程也无法像我希望的那样频繁运行,因为诊断线程仍在旋转。

使用 Boost 线程,是否可以限制一个线程在移动到另一个线程之前可以运行的时间量? 这里同样重要的是我们使用的诊断算法是黑盒,所以我们不能在里面放任何线程代码。谢谢!

0 投票
2 回答
997 浏览

c++ - 升压条件。我究竟做错了什么?

run 由 boost::thread 执行。Execute 由主程序线程调用以对操作进行排队。但是,它在从条件等待中唤醒后崩溃。

我究竟做错了什么?

0 投票
4 回答
5641 浏览

multithreading - C++ 中的内存栅栏/障碍:boost 或其他库有吗?

这些天,我正在阅读有关内存栅栏和屏障的信息,以作为同步多线程代码和避免代码重新排序的一种方式。

我通常在 Linux 操作系统下用 C++ 开发,我boost大量使用库,但我找不到任何与之相关的类。你知道提升中是否存在栅栏的内存屏障,或者是否有办法实现相同的概念?如果没有,我可以看看什么好的图书馆?

0 投票
3 回答
4460 浏览

c++ - 返回受保护数据时如何使用 lock_guard

我有一个关于使用(或类似的作用域锁)和使用语句boost::lock_guard中应受锁保护的变量的问题。return

销毁本地对象和复制返回值的顺序是怎样的?返回值优化如何影响这一点?

例子:

这是否正确(如果 mData 是受 mMutex 保护的变量)?或者我是否必须使用本地范围和临时范围,如下例所示:

0 投票
2 回答
95 浏览

c++ - 如何在 C++ 中使用指向另一个类的线程

我需要将另一个类文件中的函数用作线程

我有一个类master和一个函数start..我需要向它传递一个值并运行我已经在同一个类中使用它它工作正常...任何人都可以告诉我我错在哪里

0 投票
2 回答
13096 浏览

c++ - 如何使用 boost 可升级互斥锁的示例

我有一个多线程服务器应用程序,它需要对一些共享内存进行互斥锁。

共享内存基本上是 sTL 映射等。

很多时候我只是在看地图。但是,我也需要偶尔添加它。

例如 typedef std::map MessageMap; 消息映射消息映射;boost:shared_mutex access_;

编辑:我可能会混淆不同的锁类型。

共享/升级和独占之间有什么区别。即我不明白解释。听起来如果您只想允许大量读者,那么您想要获得的只是共享访问权限。而要写入您的共享内存,您只需要升级访问权限。还是你需要独家?boost 中的解释并不明确。

是否获得了升级访问权限,因为您可能会写。但是共享意味着你肯定不会写是什么意思?

编辑:让我更清楚地解释我想要做什么。我对答案还不满意。

这里又是一个例子,但还有一个我正在使用的代码的例子。只是一个插图,而不是实际的代码。

0 投票
2 回答
1252 浏览

c++ - 在 boost::thread 线程中使用异常


我开始玩 boost::threads,但我有点被这个问题困扰:

我不明白为什么这个程序会在抛出异常后立即崩溃,因为我试图在线程中捕获它。我认为只要处理发生在与 throwing 相同的线程中,就有可能处理异常?

附加信息:
*使用 MinGW32
*Boost v.1.44
*动态链接多线程调试 dll 线程库的版本