This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: atomic operations for shared_ptr ?


On 24/08/2013 20:26, Jonathan Wakely wrote:
On 24 August 2013 19:58, Bronek Kozicki wrote:
On 24/08/2013 18:51, Jonathan Wakely wrote:

On 24 August 2013 18:45, Bronek Kozicki wrote:


what are the current plans for supporting atomic_* free functions for
shared_ptr, as defined in C++11 (20.6.2 "Header <memory> synopsis")?
These
would be very useful for passing shared_ptr objects between threads, esp.
if
there are multiple readers and single writer.


I've been thinking about it recently and am probably just going to
implement it with a single global mutex used for all shared_ptr
instances.



erm, but that would be even worse than using mutexes as in my example code
....

It would perform badly, yes, but would mean the feature would not stay
unimplemented!



Perhaps spinlock could be implemented without breaking ABI? Please check performance comparison figures at the end of this document:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2632.html

Here they suggest use "a spinlock pool keyed on a hash of the address of the instance", although perhaps a special value of _M_ptr might be used instead (that value being the address of _M_ptr itself).

Alternatively, a single bit might be sacrificed in existing data members although that would most likely impose performance penalty on most common uses, so I'm not really advocating it.



B.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]