SynchronizationContext.Post()线程安全吗?

时间:2010-05-18 18:13:14

标签: .net multithreading synchronization locking

这是一个非常基本的问题,我想是的,但我找不到任何确定的答案。 SynchronizationContext.Post()线程安全吗?

我有一个成员变量,它保存主线程的上下文,并且从多个线程调用_context.Post()。我想可以在对象上同时调用Post()。我应该做点什么吗

lock (_contextLock) _context.Post(myDelegate, myEventArgs);

还是没必要?

修改
MSDN声明“任何实例成员都不保证是线程安全的。”我应该保留lock()吗?

2 个答案:

答案 0 :(得分:3)

严格遵循MSDN文档,然后不,SynchronizationContext.Post方法不是线程安全的。因此,除非文档中存在错误,否则您将需要同步对方法的访问。我很难相信它本身并不是线程安全的,但是你不能依赖于假设,特别是在处理线程同步问题时。在Microsoft纠正文档或真正使其成为线程安全之前,确实无法解决这个问题。

答案 1 :(得分:1)

SynchronizationContext.Post是线程安全的。文档忽略了这一事实。

我将此断言建立在Microsoft的AsyncOperationAsyncOperationManager的实现上,假设SynchronizationContext.Post是线程安全的(包括任何派生的实现)。