shared/unshared classes
Steven Schveighoffer
schveiguy at yahoo.com
Sat Feb 19 19:01:16 PST 2011
On Sat, 19 Feb 2011 21:55:53 -0500, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:
> On Saturday 19 February 2011 18:26:25 Steven Schveighoffer wrote:
>> I was working on an I/O library that I plan to use in development, and
>> possibly submit to phobos, and I thought of this case.
>>
>> A standard file can be shared or unshared. In C, since there is no
>> notion
>> of shared/unshared, everything is shared. So any writes/reads from a
>> FILE
>> * lock the object.
>>
>> But in D, we can avoid those locks when the file is unshared. However,
>> this means I have to write two pretty much identical functions for each
>> call.
>>
>> Is there an expected way to do this? I've really avoided doing anything
>> with shared or threads since the new concurrency model came out, but
>> with
>> I/O, I'll have to deal with it.
>>
>> I think a logical thing to do would be to have the shared version of the
>> function call the unshared version after locking the object. Is that a
>> good idea? Is the correct way to do this to mark the shared function
>> synchronized, and then cast 'this' to unshared to call the other
>> function? Does this automatically happen with shared functions?
>
> I would point out that per TDPL, either an entire class is synchronized
> or none
> of it is. You don't synchronize individual functions. Now, I don' think
> that
> that's the way that it's implemented at the moment, but that's the
> eventual
> situation as I understand it. So, your class shouldn't have a mixture of
> synchronized or unsynchronized. According to TDPL, it's illegal.
>
OK, I kind of remember that now. So that means, I need to create two
identical hierarchies, a synchronized one and a non-synchronized one?
I think what I'll do for now is write the non-synchronized versions, and
then see about maybe automating the synchronized parts.
-Steve
More information about the Digitalmars-d-learn
mailing list