(最好提升)无锁数组/矢量/地图/等?

考虑到我缺乏c ++知识,请尝试阅读我的意图,而不是我的技术问题。

这是我的程序https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp的骨干

我正在使用websocket ++构建Websocket服务器(我强烈建议使用websocket ++,哦,我强烈建议),并且我可以轻松安全地对每个用户数据进行线程安全操作,因为它实际上不需要由其他线程进行操作。但是,我确实希望能够在一个函数线程(可以运行多个迭代)中写一个数组(我将使用诸如vb,php,js之类的较弱语言的全部术语“数组”)同时),并读取1个或多个线程。

以堆栈为例:如果我想以特定方式(在这种情况下以净票数)将所有id(所有文章的PRIMARY列)排序并保留在内存中,我在想将具有一个在其自己的boost::thread中调用的函数,只要对该站点进行投票以对数组重新排序,就会触发该函数。

如何在不锁定和阻止的情况下执行此操作?我对用户从旧数组中读取而正在构建另一个数组中的用户百分百满意,但是我绝对不希望他们的读取或线程写入永远失败/被阻塞。

是否存在无锁阵列?如果不是,是否有某种方法可以在临时阵列中构建新阵列,然后在构建完成时将其写入实际阵列而不会锁定和阻塞?


最佳答案:

你看过Boost.Lockfree了吗?