草庐IT

lock-free

全部标签

c++ - c++ 是否存在多生产者单消费者无锁队列?

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭6年前。Improvethisquestion我读得越多,我就越困惑……我会认为找到一个用C++实现的正式正确的MPSC队列是微不足道的。每当我发现另一个问题时,进一步的研究似乎表明存在诸如ABA或其他微妙的竞争条件之类的问题。很多人都在谈论垃圾收集的必要性。这是我想避免的。那里有公认的正确开源实现吗? 最佳答案 您可能想检查破坏者;它在C++中可用:http://lmax-exchange.g

c++ - c++ 是否存在多生产者单消费者无锁队列?

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭6年前。Improvethisquestion我读得越多,我就越困惑……我会认为找到一个用C++实现的正式正确的MPSC队列是微不足道的。每当我发现另一个问题时,进一步的研究似乎表明存在诸如ABA或其他微妙的竞争条件之类的问题。很多人都在谈论垃圾收集的必要性。这是我想避免的。那里有公认的正确开源实现吗? 最佳答案 您可能想检查破坏者;它在C++中可用:http://lmax-exchange.g

ruby - 你应该在已发布的 gem 中包含 Gemfile.lock 吗?

如果您将ruby​​gem的源代码发布到github.com,是否应该包含Gemfile.lock? 最佳答案 这个人很有主见。http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/即:如果您正在开发应用程序,您应该将Gemfile.lock包含在版本控制中如果您正在开发gem,您不应该将Gemfile.lock包含在版本控制中我不确定我是否被说服了。我认为在我的版本控制中使用Gemfile.lock很好。但是我认为包含该文件

ruby-on-rails - "bundle install"从 Rails 控制台系统命令发出时未创建 Gemfile.lock

我有一个奇怪的用例,我需要从一个Rails应用程序发出“bundleinstall”(作为system()命令)另一个没有Gemfile.lock的新制作的Rails应用程序.我知道这通常是从命令行完成的,但我需要在Rails中完成。作为引用,使用irb可以轻松实现这一点。它根据预期的Gemfile获取gem并生成一个Gemfile.lock。出于某种原因,当我在Rails控制台(从另一个应用程序)中发出相同系列的命令时,bundle命令实际上并没有获取或更新gems,也没有生成Gemfile.lock。正如tadman所指出的,我认为这是由于irb和railsconsole之间的环境

ruby-on-rails - 是否需要删除 Gemfile.lock?

我在Ubuntu10.04上,我必须推送到Heroku的应用程序有一个Gemfile.lock,这个应用程序是由另一个程序员开发的。当我使用bundleinstall命令时,这会安装使用railss运行应用程序所需的gem。bundleinstall是否在我的Gemfile或Gemfile.lock中获取特定的gem?我的Gemfile和Gemfile.lock不一样。我必须删除Gemfile.lock吗?这是我的Gemfile:source'http://rubygems.org'#ruby'1.9.3'gem'rails',"=3.1.11"#gem"rake","=0.8.7"g

c++ - 可移植比较和交换(原子操作)C/C++ 库?

是否有任何小型库,将各种处理器的类似CAS的操作包装成宏或函数,可跨多个编译器移植?PS。atomic.hpplibrary在boost::interprocess::detail命名空间内。作者拒绝让它成为一个公共(public)的、维护良好的图书馆。让我们重新打开问题,看看是否还有其他选择? 最佳答案 OPA(开放可移植原子)可能非常适合您的需求。https://trac.mcs.anl.gov/projects/openpa/它在MIT风格的许可下为跨多个平台的通用原子操作提供一致的CAPI。图书馆很小,当然可以满足您的大小要

c++ - 可移植比较和交换(原子操作)C/C++ 库?

是否有任何小型库,将各种处理器的类似CAS的操作包装成宏或函数,可跨多个编译器移植?PS。atomic.hpplibrary在boost::interprocess::detail命名空间内。作者拒绝让它成为一个公共(public)的、维护良好的图书馆。让我们重新打开问题,看看是否还有其他选择? 最佳答案 OPA(开放可移植原子)可能非常适合您的需求。https://trac.mcs.anl.gov/projects/openpa/它在MIT风格的许可下为跨多个平台的通用原子操作提供一致的CAPI。图书馆很小,当然可以满足您的大小要

c++ - 使用 std::lock (c++11) 的大量 CPU 负载

我最近实现线程/互斥锁管理器的努力以75%的CPU负载(4核)告终,而所有四个正在运行的线程要么处于sleep状态,要么等待互斥锁被解锁。具体的类太大了,无法在这里完整发布,但我可以将原因缩小到死锁安全地获取两个互斥锁std::unique_locklock1(mutex1,std::defer_lock);std::unique_locklock2(mutex2,std::defer_lock);std::lock(lock1,lock2);该类的另一部分使用std::condition_variable与wait()和notify_one()在mutex1用于有选择地同时执行的某些

c++ - 使用 std::lock (c++11) 的大量 CPU 负载

我最近实现线程/互斥锁管理器的努力以75%的CPU负载(4核)告终,而所有四个正在运行的线程要么处于sleep状态,要么等待互斥锁被解锁。具体的类太大了,无法在这里完整发布,但我可以将原因缩小到死锁安全地获取两个互斥锁std::unique_locklock1(mutex1,std::defer_lock);std::unique_locklock2(mutex2,std::defer_lock);std::lock(lock1,lock2);该类的另一部分使用std::condition_variable与wait()和notify_one()在mutex1用于有选择地同时执行的某些

c++ - 两个 unique_ptr<T> 的无锁交换

交换两个unique_ptr不能保证是线程安全的。std::unique_ptra,b;std::swap(a,b);//notthreadsafe由于我需要原子指针交换,并且我喜欢unique_ptr的所有权处理,有没有一种简单的方法可以将它们结合起来?编辑:如果这是不可能的,我愿意接受替代方案。我至少想做这样的事情:threadshared_unique_ptrglobal;voidf(){threadlocal_unique_ptrlocal(newT(...));local.swap_content(global);//atomicallyforglobal}在C++11中这样