I\'m writing a special data structure that will be available in a .NET library and one of the features of this data structure is that is will be thread safe provided that only o
When I run into this situation I use a class I wrote called ThreadAffinity. It's entire purpose is to record the current thread and throw on invalid accesses from a different thread. You have to manually do the check but it encapsulates the small amount of work for you.
class Foo {
ThreadAffinity affinity = new ThreadAffinity();
public string SomeProperty {
get { affinity.Check(); return "Somevalue"; }
}
}
Class
[Immutable]
public sealed class ThreadAffinity
{
private readonly int m_threadId;
public ThreadAffinity()
{
m_threadId = Thread.CurrentThread.ManagedThreadId;
}
public void Check()
{
if (Thread.CurrentThread.ManagedThreadId != m_threadId)
{
var msg = String.Format(
"Call to class with affinity to thread {0} detected from thread {1}.",
m_threadId,
Thread.CurrentThread.ManagedThreadId);
throw new InvalidOperationException(msg);
}
}
}
Blog post on the subject: