Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


On Wed, Oct 3, 2012 at 11:19 AM, Lubos Lunak <l.lunak@suse.cz> wrote:
On Monday 01 of October 2012, Michael Stahl wrote:
On 01/10/12 11:40, Noel Grandin wrote:
On 2012-10-01 10:15, Stephan Bergmann wrote:
While that argument is irrelevant in a C/C++ context, immutability is
also an important concept when reasoning about multi-threaded code.
Therefore, the distinction between OUString and OUStringBuffer IMO
does make sense after all.

I don't see how the design helps you in a multithreaded context.
If you share an OUString instance between two threads, either thread
could assign to it, replacing it's contents, and invalidating what the
other thread sees.

but if you share 2 copies of an OUString instance in 2 threads, they
could access the one underlying buffer concurrently without issue, and
when they want to point their copy at a different value, they can do
that independently of the other -- again, OUString works in exactly the
same way as a pointer to an immutable object here, if you copy the
pointer you can dereference it without issue and point your copy to a
different object; you only need a lock if you don't copy the pointer and
share a single pointer that one thread may update (which depending on
the situation may be necessary, say you don't just want to save memory
but actually always want the threads to point to the same value).

 Either I don't get what immutable actually means in this context (in which
case I'd like to be enlightened), or you are talking about things that
actually have nothing to do with immutability. OUString is not the same like
a pointer to an immutable object, because this object contains a reference
count

No it does not... the underlying rtl_uString (the part that _is_
immutable) is ref-counted
but OUString itself is not.

iow: a given OUString may be changed to point to a rlt_ustring
instance or another, but cannot mess with the one it points to

Norbert

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.