Shared Hell
Denis Koroskin
2korden at gmail.com
Wed Oct 28 12:08:37 PDT 2009
On Wed, 28 Oct 2009 16:19:11 +0300, dsimcha <dsimcha at yahoo.com> wrote:
> == Quote from Walter Bright (newshound1 at digitalmars.com)'s article
>> Denis Koroskin wrote:
>> > I've recently updated to DMD2.035 (from DMD2.031 because all the later
>> > versions had issues with imports) and for the first time faced
>> problems
>> > with shared modifier.
>> >
>> > I don't need shared and all my globals are __gshared (they are
>> globally
>> > unique instances that don't need per-thread copies).
>> I don't understand. Are you running multiple threads? Are those threads
>> accessing globals?
>> A function that accesses shared data has to put in fences. There's no
>> way to have the same code deal with shared and unshared code.
>> As an escape from the type system, you can always cast away the
>> shared-ness. But I wonder about code that both uses global variables
>> shared across threads that don't need synchronization?
>
> I have at least one use case for __gshareds in multithreaded code. I
> often use
> __gshared variables to hold program parameters that are only set using
> getopt at
> program startup and never modified after the program becomes
> multithreaded.
>
> That said, although I use D2 regularly, I basically have ignored shared's
> existence up to this point. The semantics aren't fully implemented, so
> right now
> you get all the bondage and discipline of it without any of the
> benefits. As far
> as the problem of synchronized methods automatically being shared,
> here's an easy
> workaround until the rough edges of shared are worked out:
>
> //Instead of this:
> synchronized SomeType someMethod(Foo args) {
> // Do stuff.
> }
>
> // Use this:
> SomeType someMethod(Foo args) {
> synchronized(this) {
> // Do stuff.
> }
> }
Yes, I've though about it. That's probably the only workaround for now and
I'll give it. Thanks.
More information about the Digitalmars-d
mailing list