Sha*_*ane 12 .net c# concurrency multithreading
我想做类似下面的事情 - 基本上我调用异步操作,它将在另一个线程中调用回调,我想等待它完成"内联".我担心的是,由于存储在寄存器中,因此跨线程共享的变量变量(bar和event)可能无法同步.如果它们是成员变量,我可以将它们标记为volatile,但volatile不能用于堆栈上创建的局部变量.我可以使用成员变量,但我认为它更干净,不会让我的课程整洁.
Bar bar = null;
ManualResetEvent event = new ManualResetEvent(false);
foo.AsyncOperation(new Action(()=>{
// This delegate will be called in another thread
bar = ...
event.Set();
}));
event.WaitOne(timeout);
// use bar
Run Code Online (Sandbox Code Playgroud)
是的,它会正常工作.在这里阅读
http://www.albahari.com/threading/part4.aspx
The following implicitly generate full fences: Setting and waiting on a signaling construct
并且在信号构建ManualResetEvent中包括.
如果你想知道什么full fence是,在同一页面:
完全围栏最简单的内存屏障是一个完整的内存屏障(全栅栏),可以防止任何类型的指令重新排序或围绕该围栏缓存.调用Thread.MemoryBarrier会生成一个完整的栅栏;
| 归档时间: |
|
| 查看次数: |
1211 次 |
| 最近记录: |