(最好是boost)无锁数组/矢量/映射等
(preferably boost) lock-free array/vector/map/etc?
考虑到我缺乏c++知识,请尝试阅读我的意图,而不是我糟糕的技术问题。
这是我的程序的主干https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcastrongerver/broadcastrongerver.cpp
我正在用websocket++构建一个websocket服务器(哦,websocket++很甜蜜。)我强烈推荐),并且我可以很容易地安全地操作每个用户的数据线程,因为它真的不需要被不同的线程操作;但是,我确实希望能够在一个函数线程中写入数组(我将使用来自vb, php, js等较弱语言的所有术语"数组")(可以同时运行的多个迭代),并且还可以在1个或多个线程中读取。
以堆栈为例:如果我想让所有的id
s(所有文章的PRIMARY
列)以特定的方式排序,在这种情况下,通过净投票,并保存在内存中,我想我会有一个在其自己的boost::thread
中调用的函数,每当网站上的投票进入重新排序数组时就会触发。
如何在不锁定&阻塞?当用户从一个旧数组中读取另一个正在构建的数组时,我100%没问题,但我绝对不希望他们的读取或线程写入失败/被阻塞。
是否存在无锁数组?如果没有,是否有某种方法可以在临时数组中构建新数组,然后在构建完成时将其写入实际数组而不锁定&阻塞?
你看过Boost.Lockfree吗?
呃,呃,呃。复杂。
看这里(举个例子):RCU——这只是关于多次读和一次写。
我猜同时有多个作者是行不通的。您应该寻找一种比数组更有效的表示,它允许更快的更新。平衡的树怎么样?Log (n)不应该以明显的方式阻塞任何东西。
关于boost——我很高兴它终于有适当的线程同步支持。
当然,您也可以保留一份副本并批量更新。然后,后台进程合并更新并将结果复制给阅读器。
- 如何在C++中将数组转换为矢量指针
- 将矢量<T>转换为矢量<数组<T>>
- 打印矢量数组中的所有元素
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 如何在 c++ 中格式化和访问 2D 矢量数组中的数据
- 使用 GDAL 获取矢量数组中的所有行数和列数
- 动态更改数组的大小并读取值.(无矢量)
- 效率:标准::数组与标准::矢量
- C++,为什么数组比矢量更快,使用更少的内存
- 如何将矢量<int>转换为字符数组?
- 在矢量数组C++中使用算法库操作
- C++ 2D 矢量到 2D pybind11 数组
- 在 c++ 中将数字转换为矢量数组的函数
- 用不同的值填充数组/矢量的边缘和中心
- 如何使用模板使用fibonacci编号创建编译时的模板/数组/矢量
- 如何在C++中返回 2D 字符串数组/矢量
- 打印 2D 数组矢量的最佳方法是什么
- (最好是boost)无锁数组/矢量/映射等
- 操作脚本 3 - 使用数组 - 矢量类型初始化 AS 3.0 矢量。<Array>?(加上等效C++)