【发布时间】:2013-05-01 19:29:09
【问题描述】:
我有一个方法,可以同步访问 myst,一次只允许一个线程通过它。这是我当前的实现:
private Boolean m_NoNeedToProceed;
private Object m_SynchronizationObject = new Object();
public void MyMethod()
{
lock (m_SynchronizationObject)
{
if (m_NoNeedToProceed)
return;
现在我正在考虑像这样改变它:
private Boolean m_NoNeedToProceed;
private Object m_SynchronizationObject = new Object();
public void MyMethod()
{
if (m_NoNeedToProceed)
return;
lock (m_SynchronizationObject)
{
在锁定之前快速返回不是更好吗,以便调用线程可以继续而不等待前一个完成方法调用?
【问题讨论】:
-
在哪里可以设置
m_NoNeedToProceed? -
在其他方法中。例如,当用户单击按钮或其他任何内容时。这只是有时可以设置的一个条件,以避免该方法运行。
-
@Zarathos 可以安全地假设访问
bool, char, byte, sbyte, short, ushort, uint, int, float, reference type是原子的。所以读/写布尔是安全的。 -
@I4V 是的,但不能保证它们在多核 CPU 上是“新鲜的”。你需要一个内存屏障(使用锁或易失性或 Thread.MemoryBarrier())。
标签: c# .net locking synchronized