我如何使用 std::vector<std::mutex> 之类的东西?

如何解决我如何使用 std::vector<std::mutex> 之类的东西??

开发过程中遇到我如何使用 std::vector<std::mutex> 之类的东西?的问题如何解决?下面主要结合日常开发的经验,给出你关于我如何使用 std::vector<std::mutex> 之类的东西?的解决方法建议,希望对你解决我如何使用 std::vector<std::mutex> 之类的东西?有所启发或帮助;

问题描述

我有大量但可能不同的对象同时写入.我想用互斥锁保护该访问.为此,我以为我使用了 std::vector,但这不起作用,因为 std::mutex 没有副本或移动构造函数,而 std::vector::resize() 需要.

这个难题的推荐解决方案是什么?

编辑:所有 C++ 随机访问容器都需要复制或移动构造函数来重新调整大小吗?std::deque 有帮助吗?

再次编辑

首先,感谢您的所有想法.我对避免静音和/或将它们移动到对象中的解决方案不感兴趣(我不提供细节/原因).所以考虑到我想要一个可调整数量的互斥锁(在没有互斥锁被锁定的情况下保证发生调整)的问题,那么似乎有几种解决方案.

1 我可以使用固定数量的 mutic,并使用哈希函数从对象映射到 mutic(如 Oblivous 船长的回答).这样会产生冲突,但是如果mutices的数量远大于线程的数量,但仍然小于对象的数量,那么冲突的数量应该很小.

2 我可以定义一个包装类(如 ComicSansMS 的回答),例如

struct mutex_wrapper : std::mutex
{
  mutex_wrapper() = default;
  mutex_wrapper(mutex_wrapper const&) noexcept : std::mutex() {}
  bool operator==(mutex_wrapper const&other) noexcept { return this==&other; }
};

并使用 std::vector.

3 我可以使用 std::unique_ptr<std::mutex> 来管理单个互斥锁(如 Matthias 的回答).这种方法的问题是每个互斥体都是在堆上单独分配和取消分配的.因此,我更喜欢

4 std::unique_ptrmutices( 新 std::mutex[n_mutex] );

当初始分配一定数量的 n_mutex mutices 时.如果以后发现这个数字不够,我干脆

if(need_mutex > n_mutex) {
  mutices.reset( new std::mutex[need_mutex] );
  n_mutex = need_mutex;
}

那么我应该使用这些 (1,2,4) 中的哪一个?

尚未找到解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

编程问答相关问答

是否可以将 Python 程序转换为 C/C++? 我需要实现几个算法,我不确定性能差距是否足以证明我在 C/C++ 中执行它时所经历的所有痛苦(我不擅长)).我想写一个简单的算法,并根据这样一个转换后的解决方案对其进行基准测
我想使用 NTT 进行快速平方(请参阅快速 bignum 平方计算),但即使对于非常大的数字……超过 12000 位.
以下代码: myQueue.enqueue(\'a\'); myQueue.enqueue(\'b\'); cout << myQueue.dequeue() << myQueue.dequeue();
据我所知,写时复制不是在 C++11 中实现符合标准的 std::string 的可行方法,但是当它最近在讨论中出现时,我发现我自己无法直接支持这种说法.
这篇文章的评论部分有一个关于使用 std::vector::reserve 的帖子() vs. std::vector::resize().
我了解 inline 本身是对编译器的建议,它可以自行决定是否内联函数,并且还会生成可链接的目标代码.
我最近遇到了一个问题 可以使用模数除法轻松解决,但输入是浮点数: 给定一个周期函数(例如sin)和一个只能在周期范围内计算它的计算机函数(例如[-π,π]),制作一个可以处理任何输入的函数.
我想了解某个函数在我的 C++ 程序中在 Linux 上执行所需的时间.之后,我想做一个速度比较.我看到了几个时间函数,但最终从 boost 得到了这个.时间:
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注