【发布时间】:2011-07-20 09:10:40
【问题描述】:
Threading in C# by Joseph Albahari 对此进行了简短的讨论,并表示:
以下隐式生成完整的栅栏:
- C# 的锁定语句 (Monitor.Enter/Monitor.Exit)
- Interlocked 类的所有方法(我们很快就会介绍)
- 使用线程池的异步回调——包括 异步委托、APM 回调和任务延续
- 设置和等待信号结构
- 任何依赖于信号的事情,例如启动或等待任务
由于“异步委托”在列表中,我假设至少 EndInvoke 是完全隔离的。但是 BeginInvoke 呢?不幸的是,我无法 F11(= 调试步骤)进入 BeginInvoke 代码 - 源代码在某处可用吗?虽然指向明确答案的链接会更好。
【问题讨论】:
-
(BeginInvoke 由运行时本身提供;实际上并没有任何来源)
-
你的意思是他们直接用机器代码开发了这两种方法? ;) 但老实说,很高兴知道在线程安全方面是否有任何保证,与是否有办法查看 MS 的源代码无关。我在“最新标准”的第二部分和第四部分或我从 [msdn.microsoft.com/en-us/netframework/aa569283.aspx]
-
不一定是机器码,可能是 C 或 C++。如果你真的想看它,你可以下载 Mono 源代码,看看他们是如何做到的。
-
@Tomas Voracek - 如您所说,请发送链接/说明如何获取 BeginInvoke 和 EndInvoke 的源代码。
-
@Tomas,因为您似乎再次拒绝阅读细节。 “BeginInvoke”的来源到底在哪里?我找不到它了。 Windows Forms 与“BeginInvoke on delegates”无关,这正是我所要求的。我不是在谈论 Control.BeginInvoke。
标签: c# .net multithreading