问题标签 [boost-mutex]

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 投票
4 回答
2057 浏览

c++ - 标准互斥锁或增强互斥锁?哪个更可取?

std::mutex 和 boost::mutex 之间的真正区别是什么?哪一个在实现和编译方面更快?它们都是便携的吗?我阅读了与它相关的问题,但没有明确提及差异。仅从 c++11 开始支持 std 互斥锁,因此较旧的编译器不支持它。旧编译器是否支持 boost 互斥锁?如果最重要的条件要求代码是可移植的,那么应该首选什么?

0 投票
1 回答
582 浏览

c++ - 不同线程之间的互斥锁同步

由于我最近开始编写多线程程序,这可能是一个愚蠢的问题。我发现了很棒的互斥锁和条件变量的用法。据我所知,用途是:

  1. 保护部分代码/共享资源免受多线程访问的破坏。因此锁定该部分,因此可以控制将访问哪个线程。
  2. 如果一个线程正在等待来自另一个线程的资源/条件,则可以使用 cond.wait() 而不是每毫秒轮询一次

现在考虑以下类示例:

在上面的示例中,可以调用 Exit(),它会通知等待 Dequeue 的线程该退出了,而无需等待队列中的更多数据。我的问题是,既然 Dequeue 已经获得了锁(m_mutex),那么 Exit 如何获得相同的锁(m_mutex)?除非 Dequeue 释放锁,否则只有 Exit 可以获取它吗?

我在析构函数实现中也看到了这种模式,使用相同的类成员互斥锁,析构函数通知所有线程(类方法)是时候终止它们各自的循环/函数等了。

0 投票
0 回答
153 浏览

c++ - lock_guard 导致代码行挂起

我有以下代码,我将 lock_guard 用于命名互斥锁,以便在代码执行完成时释放互斥锁(包括抛出的异常)

但是代码挂在 boost::lock_guard guard(mutex); 并且不进行下一行。为什么?

0 投票
0 回答
241 浏览

c++ - 如何跟踪代码以找出导致问题的互斥锁

我有一些包含许多函数和线程以及许多不同互斥锁的代码。有时代码运行良好,有时我得到这些错误之一

1) “/usr/include/boost/thread/pthread/mutex.hpp:111: boost::mutex::~mutex(): Assertion '!res' 失败。”

2) “/usr/include/boost/thread/pthread/condition_variable.hpp:168: boost::condition_variable_any::~condition_variable_any(): 断言'!pthread_mutex_destroy(&internal_mutex)' 失败。”

我想也许其中一个互斥锁在解锁之前就被破坏了。因此,我调查了析构函数中的所有 pthread_mutex_destroys,但找不到任何问题。

例如,其中一个析构函数如下所示

使用互斥锁和条件变量的 push 和 pop 函数的number_of_threads增加和减少。

如何跟踪代码以找出问题发生的位置和原因。我有很多互斥锁和函数,所以要找到问题并不容易。任何提示都会有所帮助。

提前致谢

0 投票
3 回答
370 浏览

c++ - 使用boost将单线程转为多线程

我正在尝试将代码从单线程转换为多线程(例如,创建 6 个线程而不是 1 个),同时确保它们都开始和结束而不会相互干扰。有什么方法可以做到这一点?我可以只做一个创建线程直到 i < 6 的 for 循环吗?只需添加一个带有 lock() 和 unlock() 的互斥锁类?

0 投票
2 回答
196 浏览

c - 为什么我需要在 C 中初始化 pthread 互斥锁?

我试图理解为什么 pthread_mutex_init 需要在 pthread_mutex_lock 之后调用。

我编写了一个小程序,显示在 pthread_mutex_init 之前调用 pthread_mutex_lock 时行为很奇怪(见下文),但我不明白为什么会这样。

在 main 开头调用 pthread_mutex_init 时,这就是预期的输出。

当 pthread_mutex_init 被注释掉时,每次程序运行时输出都会改变。

为什么会这样?