Frank Hileman:
>I don't see how a function can be guaranteed to be executed only
>once, and be thread unsafe.

I am not saying that static constructors are not thread safe (I do not
know), but a not thread safe implementation of the above could be something
as simple as (psuedo code):

class StaticManager
{
    function Intialize(class)
    {
        if(not IsInitialized(class))
        {
            _Initialize(class)
            this.managedClasses.Add(class)
        }
    }

    function IsIntialized(class)
    {
        return this.managedClasses.contains(class)
    }

    function _Initialize(class)
    {
        //set up memory for class, call static constructors, etc
    }
}

Again a Disclaimer: I am not saying this is how it is implemented, why
anyone would want to do it that way, that this is a good way to implement
it, or that I know how it is implemented, only that there is definitely a
way to execute something once in a not thread safe manner.

Best,
Bill

You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced 
DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to