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

c++ - 使用 boost::interprocess::mutex 同步共享内存访问

我正在开发两个不同的应用程序C++。这些应用程序通过boost::interprocess::shared_memory_object. 现在我需要一个mutex变量来同步两者之间的操作。有人可以为此提供一个最小的例子。我的应用程序代码如下:

应用程序 A:

应用 B:

0 投票
1 回答
411 浏览

c++ - 通过引用将具有互斥锁的类对象传递给 boost::thread

我想启动一个执行一些计算的函数的多个实例。该函数接受一个类对象,并且由于该类包含一个shared_mutex我通过引用传递它,因此所有线程都通过同一个对象访问该类。
如果我尝试通过 boost::threads (即使只有一个)启动该函数,我确实会收到编译错误:

如果我直接通过 main 调用该函数,它可以正常工作。如何多次运行该功能?互斥锁用于线程安全,因为多个线程读取/写入类。分解它看起来像:

函数看起来像:

0 投票
1 回答
102 浏览

c++ - boost::scoped_lock 似乎没有锁定 std::cout

我正在使用 boost 1.54.0 和 Visual Studio 2010。对于代码:

大约一半的时间我得到以下信息(显然,线程ID和执行顺序不同):

...而不是这个(这是我所期望的):

但是,使用

...似乎没有问题。

输出似乎总是遵循相同的模式。我是否错误地使用了互斥锁,还是与 std::cout 有关?

0 投票
2 回答
752 浏览

c++ - 如何使用 boost::mutex 作为 std::map 中的映射类型?

我想将键/索引锁定在另一个地图中,如下所示:

但是,我收到以下错误:

它似乎适用于std::vector,但不适用于std::map。我究竟做错了什么?

0 投票
2 回答
2025 浏览

c++ - boost::shared_mutex 比 Linux 上的粗略 std::mutex 慢

我有一个std::unordered_map受到来自多个线程的非常重的读取工作负载的影响。我可以使用 astd::mutex进行同步,但由于并发读取应该没问题,我想使用 aboost::shared_mutex代替。为了测试性能改进,我首先用一堆值预先填充了一个映射,然后让一堆线程运行读取测试

我为我受保护的粗实现和受.countstd::lock_guard<std::mutex>boost::shared_lock<boost::shared_mutex>

在我的带有 GCC 6.1.1 的 Arch Linux x86_64 系统上,boost::shared_lock版本总是较慢!在我朋友的装有 MSVC 2013 的 Windows 10 系统上,boost::shared_lock总是更快! 完整的、可编译的代码在 github 上:https ://github.com/silverhammermba/sanity

编辑

这似乎是一个特定于平台的问题。看上面。如果其他人可以构建和运行此代码并报告他们是否看到正输出(shared_lock更快)或负输出(当然互斥锁更快)以及您使用的平台,我将非常感激。

0 投票
0 回答
29 浏览

c++ - 访问具有多个线程的类成员时如何确保线程安全

我正在尝试让线程同步工作。下面是一个示例代码(可运行的C++ shell 示例)用于说明。当我运行程序时,三个成员函数bar1(),bar2()bar3()被执行。不过,我的目标是为这些功能中的每一个使用一个线程。我可以在我的开发环境中访问 boost 库。我知道如何使用线程并且还在ThreadedProcess()下面实现了一个功能。但据我所知,它不是线程安全的,因为多个线程可能想要同时访问同一个内存。所以我的问题是,我如何确保成员一次只能被一个线程访问。谢谢!

0 投票
2 回答
2225 浏览

c++ - 同时持有两个互斥锁

我想知道如果我同时持有两个 boost::scoped_locks 是否会有任何问题。锁正在锁定不同的互斥锁。考虑以下示例:

我知道这不应该导致死锁。但是有没有其他问题。也许这会导致线程睡眠时间过长?

0 投票
1 回答
208 浏览

c++ - OpenMP v.2.0 或 Boost 线程 1.59

我想知道如何以安全的方式并行化下面的循环。我找到了像这样的一些可能的解决方案。但是我只能使用 OpenMP 2.0 版和 Boost 1.59 版。

算法解释:

它遍历边界框内的所有三角形,然后在_considerTriangle函数中检查相交的可能性(具有唯一三角形)。最后在_considerTriangle中,如果一个三角形相交,它会将三角形插入到一个集合容器intersectedTri中。

我想知道如何安全地将其平行化。

0 投票
1 回答
1573 浏览

c++ - 错误:没有匹配函数调用'boost::shared_lock::shared_lock(const Lock&)'

我已经实现了如下的 ReadLock:

在我的 myClass.h

在 myClass.cpp 中:

该代码在 VS2010 中有效,但在 GCC4.0 中失败。编译器在 ReadLock 处抛出错误,说没有匹配的函数。我怀疑是变量 myLock 的“const”正确性问题。当我删除函数声明中的 const 时,错误消失了。有人可以向我解释一下吗?为什么这在 Windows 下有效,但在 gcc 下无效?

这里有什么建议吗?谢谢。

0 投票
1 回答
475 浏览

c++ - 为什么 boost 的进程间互斥锁在 posix 上不健壮?

我对提升很陌生,只是想了解其中的一小部分——进程间互斥锁。

AFAIU,在使用文件锁的跨平台实现中有一个强大的互斥体仿真:http: //www.boost.org/doc/libs/1_62_0/boost/interprocess/detail/robust_emulation.hpp

这是为了模拟 posix 标准中可用的健壮互斥锁,但只有在平台特定版本不可用时才会使用通用方法。

但是在实际支持健壮互斥锁的posix系统上(我想这取决于内核版本),健壮互斥锁实际上并没有启用。http://www.boost.org/doc/libs/1_62_0/boost/interprocess/sync/posix/pthread_helpers.hpp

所以我不太了解这里的逻辑,posix 强大的互斥锁实现是否存在严重的性能损失,所以我们不想使用它?即便如此,至少应该有一个选项可以选择启用此功能。

为了解决这个问题,因为我是菜鸟,有没有办法让通用实现在 posix 实现上可用,以便我可以利用鲁棒性?