草庐IT

Shared-Preferences

全部标签

c++ - 用于无锁单链表的原子 shared_ptr

我想知道是否可以为任何“常见”架构(如x64或ARMv7/ARMv8)创建无锁、线程安全的共享指针。关于lock-freeprogrammingatcppcon2014的谈话,HerbSutter提出了无锁单链表的(部分)实现。实现看起来很简单,但它依赖于原子shared_ptr标准库中尚不存在或使用专用std::atomic...的实现功能。这一点尤其重要,因为单个push/pop调用可能会调用多个原子加载/存储和compare_exchange操作。我看到的问题(而且我认为谈话中的一些问题朝着相同的方向发展)是,要使这成为一个真正的无锁数据结构,这些原子操作本身必须是无锁的。我不知

c++ - 用于无锁单链表的原子 shared_ptr

我想知道是否可以为任何“常见”架构(如x64或ARMv7/ARMv8)创建无锁、线程安全的共享指针。关于lock-freeprogrammingatcppcon2014的谈话,HerbSutter提出了无锁单链表的(部分)实现。实现看起来很简单,但它依赖于原子shared_ptr标准库中尚不存在或使用专用std::atomic...的实现功能。这一点尤其重要,因为单个push/pop调用可能会调用多个原子加载/存储和compare_exchange操作。我看到的问题(而且我认为谈话中的一些问题朝着相同的方向发展)是,要使这成为一个真正的无锁数据结构,这些原子操作本身必须是无锁的。我不知

c++ - 返回 shared_ptr<> 的成员函数的 const 正确性

如果我有课classfoo{private:std::shared_ptrm_data;public:std::shared_ptrGetData(){returnm_data;}}我相信std::shared_ptr应该转换为std::shared_ptr并共享同一个对象,但函数的const正确性是什么?IE这是有效的吗?std::shared_ptrGetData()const; 最佳答案 函数会修改对象的内部状态吗?没有。*函数是否允许其调用者(或其他外部环境)修改访问对象的内部状态?没有。这意味着将其标记为const是安全的

c++ - 返回 shared_ptr<> 的成员函数的 const 正确性

如果我有课classfoo{private:std::shared_ptrm_data;public:std::shared_ptrGetData(){returnm_data;}}我相信std::shared_ptr应该转换为std::shared_ptr并共享同一个对象,但函数的const正确性是什么?IE这是有效的吗?std::shared_ptrGetData()const; 最佳答案 函数会修改对象的内部状态吗?没有。*函数是否允许其调用者(或其他外部环境)修改访问对象的内部状态?没有。这意味着将其标记为const是安全的

c++ - 在 std::make_shared 中使用 c++ 聚合初始化

根据我的理解,以下代码构造了一个Foo类型的对象,然后将该对象移动到std::make_shared分配的内存中structFoo{std::strings;inti;charc;};intmain(intargc,char*argv[]){autofoo=std::make_shared(Foo{"hello",5,'c'});}有没有可能aggregateinitializeFoo直接放入std::make_shared分配的内存? 最佳答案 您可以使用可变参数构造函数模板创建一个适配器来转发参数,例如:templatestru

c++ - 在 std::make_shared 中使用 c++ 聚合初始化

根据我的理解,以下代码构造了一个Foo类型的对象,然后将该对象移动到std::make_shared分配的内存中structFoo{std::strings;inti;charc;};intmain(intargc,char*argv[]){autofoo=std::make_shared(Foo{"hello",5,'c'});}有没有可能aggregateinitializeFoo直接放入std::make_shared分配的内存? 最佳答案 您可以使用可变参数构造函数模板创建一个适配器来转发参数,例如:templatestru

c++ - std::shared_timed_mutex 上的共享锁可以升级为独占锁吗?

新的std::shared_timed_mutex允许两种类型的锁:共享锁和排他锁。如果一个人持有共享锁,有没有办法将它原子交换(“升级”)为独占锁?换句话说,给定以下代码,我怎样才能避免非原子丢弃和重新锁定?std::shared_timed_mutexm;//Guardsastd::vector.m.lock_shared();//Readfromvector.(Sharedlockissufficient.)//...//Nowwewanttowritetothevector.Weneedanexclusivelock.m.unlock_shared();//理想情况下,m.un

c++ - std::shared_timed_mutex 上的共享锁可以升级为独占锁吗?

新的std::shared_timed_mutex允许两种类型的锁:共享锁和排他锁。如果一个人持有共享锁,有没有办法将它原子交换(“升级”)为独占锁?换句话说,给定以下代码,我怎样才能避免非原子丢弃和重新锁定?std::shared_timed_mutexm;//Guardsastd::vector.m.lock_shared();//Readfromvector.(Sharedlockissufficient.)//...//Nowwewanttowritetothevector.Weneedanexclusivelock.m.unlock_shared();//理想情况下,m.un

c++ - std::make_shared() 是否使用自定义分配器?

考虑thiscode:#include#includeclassSomeClass{public:SomeClass(){std::coutptr1(newSomeClass);std::coutptr2(std::make_shared());std::cout这是它的输出:CustomnewSomeClass()Anotherone...SomeClass()Done!~SomeClass()~SomeClass()Customdelete显然,std::make_shared()没有调用new运算符——它使用的是自定义分配器。这是std::make_shared()的标准行为吗?

c++ - std::make_shared() 是否使用自定义分配器?

考虑thiscode:#include#includeclassSomeClass{public:SomeClass(){std::coutptr1(newSomeClass);std::coutptr2(std::make_shared());std::cout这是它的输出:CustomnewSomeClass()Anotherone...SomeClass()Done!~SomeClass()~SomeClass()Customdelete显然,std::make_shared()没有调用new运算符——它使用的是自定义分配器。这是std::make_shared()的标准行为吗?