我有类似如下的功能:使用Dispatcher.Invoke/BeginInvoke是否固有地提供对代码段的互斥访问?
public void Increment()
{
if (Count == 0)
{
AttachResource();
}
Count++;
}
更改我的代码意味着这一功能将在多个线程中调用。由于AttachResource()的特性,这个函数必须在主线程上运行。
假设我修改的功能如下:
public void Increment()
{
_dispatcher.Invoke(new Action(() =>
{
if (Count == 0)
{
AttachResource();
}
Count++;
}));
}
我需要也锁定到这个代码,以确保线程互斥访问?或者,通过调度程序的调用自然通过将多个调用序列化到主线程来实现这一点?
从仅在一个特定线程上运行的代码访问的任何资源从不需要使用锁保护。没有任何东西可以被锁定。 – 2012-02-15 02:21:28
谢谢大家!我的方法的完整性检查表示赞赏。 – Nathanael 2012-02-15 02:28:31