这种模式叫什么?软锁?

时间:2011-08-31 15:28:42

标签: c# design-patterns naming

以下是我必须编写的一些代码,主要是与UI内容结合使用,并且总是存在可能意外结束无限循环的事件。

  public class MyClass
  {
    public event EventHandler MyEvent;
    private bool IsHandlingEvent = false;

    public MyClass()
    {
      MyEvent += new EventHandler(MyClass_MyEvent);
    }

    void MyClass_MyEvent(object sender, EventArgs e)
    {
      if (IsHandlingEvent) { return; }

      IsHandlingEvent = true;
      {
        // Code goes here that handles the event, possibly invoking 'MyEvent' again.
        // IsHandlingEvent flag is used to avoid redundant processing.  What is this
        // technique, or pattern called.
        // ...
      }
      IsHandlingEvent = false;
    }
  }

如您所见,使用标志'IsHandlingEvent'用于防止冗余或可能的无限事件调用。虽然我并不总是这样做(因为有明显的危险),但有时它是一个有用的解决方案,但我不知道该怎么称呼它。由于缺乏更好的术语,我一直在使用“软锁”。什么是真名?

修改
是的,我知道它不是线程安全的等等。这是一个名称问题,而不是设计问题。但是因为值得讨论...... Code improvement: Better alternatives to this pattern?

2 个答案:

答案 0 :(得分:3)

已经有很多关于设计的说法(不是线程安全等)。

你似乎要求一个名字......不知道这是否广为流传,但我多次听说这是一个可重入的哨兵。

答案 1 :(得分:1)

我认为这与Semaphore有些相关,即:使用布尔变量查看某些内容。

编辑:正如问题评论中所指出的那样,应避免使用这种“模式”,因为它不是线程安全的,异常安全且良好。