(最好是boost)无锁数组/矢量/映射等



考虑到我缺乏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——我很高兴它终于有适当的线程同步支持。

当然,您也可以保留一份副本并批量更新。然后,后台进程合并更新并将结果复制给阅读器。

最新更新