Is it permissible to cache/reuse Thread.GetNamedSlot between threads?

Viewed 414

The Thread.GetNamedDataSlot method acquires a slot name that can be used with Thread.SetData.

Can the result of the GetNamedDataSlot function be cached (and reused across all threads) or should it be invoked in/for every thread?

The documentation does not explicitly say it "shouldn't" be re-used although it does not say it can be either. Furthermore, the example shows GetNamedDataSlot used at every GetData/SetData site; even within the same thread.

For example (note that BarSlot slot is not created/assigned on all specific threads that the TLS is accessed);

public Foo {
    private static LocalStorageDataSlot BarSlot = Thread.GetNamedDataSlot("foo_bar");

    public static void SetMethodCalledFromManyThreads(string awesome) {
        Thread.SetData(BarSlot, awesome);
    }

    public static void ReadMethodCalledFromManyThreads() {
        Console.WriteLine("Data:" + Thread.GetData(BarSlot));
    }
}

I asks this question in relationship to code structure; any micro performance gains, if any, are a freebie. Any critical issues or performance degradation with the reuse make it not a viable option.

1 Answers
Related