问题标签 [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.
c++ - 使用 boost::interprocess::mutex 同步共享内存访问
我正在开发两个不同的应用程序C++
。这些应用程序通过boost::interprocess::shared_memory_object
. 现在我需要一个mutex
变量来同步两者之间的操作。有人可以为此提供一个最小的例子。我的应用程序代码如下:
应用程序 A:
应用 B:
c++ - 通过引用将具有互斥锁的类对象传递给 boost::thread
我想启动一个执行一些计算的函数的多个实例。该函数接受一个类对象,并且由于该类包含一个shared_mutex
我通过引用传递它,因此所有线程都通过同一个对象访问该类。
如果我尝试通过 boost::threads (即使只有一个)启动该函数,我确实会收到编译错误:
如果我直接通过 main 调用该函数,它可以正常工作。如何多次运行该功能?互斥锁用于线程安全,因为多个线程读取/写入类。分解它看起来像:
函数看起来像:
c++ - boost::scoped_lock 似乎没有锁定 std::cout
我正在使用 boost 1.54.0 和 Visual Studio 2010。对于代码:
大约一半的时间我得到以下信息(显然,线程ID和执行顺序不同):
...而不是这个(这是我所期望的):
但是,使用
...似乎没有问题。
输出似乎总是遵循相同的模式。我是否错误地使用了互斥锁,还是与 std::cout 有关?
c++ - 如何使用 boost::mutex 作为 std::map 中的映射类型?
我想将键/索引锁定在另一个地图中,如下所示:
但是,我收到以下错误:
它似乎适用于std::vector
,但不适用于std::map
。我究竟做错了什么?
c++ - boost::shared_mutex 比 Linux 上的粗略 std::mutex 慢
我有一个std::unordered_map
受到来自多个线程的非常重的读取工作负载的影响。我可以使用 astd::mutex
进行同步,但由于并发读取应该没问题,我想使用 aboost::shared_mutex
代替。为了测试性能改进,我首先用一堆值预先填充了一个映射,然后让一堆线程运行读取测试:
我为我受保护的粗锁实现和受.count
std::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
更快)或负输出(当然互斥锁更快)以及您使用的平台,我将非常感激。
c++ - 访问具有多个线程的类成员时如何确保线程安全
我正在尝试让线程同步工作。下面是一个示例代码(可运行的C++ shell 示例)用于说明。当我运行程序时,三个成员函数bar1()
,bar2()
和bar3()
被执行。不过,我的目标是为这些功能中的每一个使用一个线程。我可以在我的开发环境中访问 boost 库。我知道如何使用线程并且还在ThreadedProcess()
下面实现了一个功能。但据我所知,它不是线程安全的,因为多个线程可能想要同时访问同一个内存。所以我的问题是,我如何确保成员一次只能被一个线程访问。谢谢!
c++ - 同时持有两个互斥锁
我想知道如果我同时持有两个 boost::scoped_locks 是否会有任何问题。锁正在锁定不同的互斥锁。考虑以下示例:
我知道这不应该导致死锁。但是有没有其他问题。也许这会导致线程睡眠时间过长?
c++ - OpenMP v.2.0 或 Boost 线程 1.59
我想知道如何以安全的方式并行化下面的循环。我找到了像这样的一些可能的解决方案。但是我只能使用 OpenMP 2.0 版和 Boost 1.59 版。
算法解释:
它遍历边界框内的所有三角形,然后在_considerTriangle函数中检查相交的可能性(具有唯一三角形)。最后在_considerTriangle中,如果一个三角形相交,它会将三角形插入到一个集合容器intersectedTri中。
我想知道如何安全地将其平行化。
c++ - 错误:没有匹配函数调用'boost::shared_lock::shared_lock(const Lock&)'
我已经实现了如下的 ReadLock:
在我的 myClass.h
在 myClass.cpp 中:
该代码在 VS2010 中有效,但在 GCC4.0 中失败。编译器在 ReadLock 处抛出错误,说没有匹配的函数。我怀疑是变量 myLock 的“const”正确性问题。当我删除函数声明中的 const 时,错误消失了。有人可以向我解释一下吗?为什么这在 Windows 下有效,但在 gcc 下无效?
这里有什么建议吗?谢谢。
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 实现上可用,以便我可以利用鲁棒性?