考虑到我缺乏c ++知识,请尝试阅读我的意图,而不是我糟糕的技术问题。
的支柱我正在使用websocket ++构建一个websocket服务器(哦,我很强烈建议使用websocket ++。我可以轻松地安全地操作每个用户数据线程,因为它实际上不需要被不同的线程操纵;但是,我确实希望能够写入一个数组(我将在一个函数线程中使用来自较弱的语言,如vb,php,js的catch-all术语“数组”)(可以运行多次迭代)同时)并读取一个或多个线程。
以堆栈为例:如果我希望以特定方式排序所有文章的所有id
s(PRIMARY
列),在这种情况下通过网络投票,并保留记忆,我想我会有一个在其自己的boost::thread
中调用的函数,每当对该网站进行投票以重新排序该数组时就会触发该函数。
如何在没有锁定的情况下完成此操作堵?当用户从旧阵列读取而另一个正在构建时,我100%罚款,但我绝对不希望他们的读取或线程写入永远失败/被阻止。
是否存在无锁数组?如果没有,是否有某种方法可以在临时数组中构建新数组,然后在建筑物完成时将其写入实际数组而不锁定&阻断?
答案 0 :(得分:4)
你看过Boost.Lockfree吗?
答案 1 :(得分:1)
请看这里(例如):RCU - 这只是关于多次读取和一次写入。
我的猜测是,多个作家不会同时工作。您应该寻找比数组更有效的表示,这样可以实现更快的更新。平衡的树怎么样? log(n)永远不应该以明显的方式阻止任何事情。
关于提升 - 我很高兴它最终对线程同步有适当的支持。
当然,您也可以保留副本并批量更新。然后,后台进程合并更新并为读者复制结果。