小编cab*_*bbi的帖子

我怎么能相信'锁'了?

回到我原来的非托管c ++时代,我可以信任多线程应用程序中的关键部分.所以,现在使用dotNet/C#,我正在转发锁定机制.通过锁定资源,我确信任何线程都无法在我的代码段中访问这些资源.

这在dotNet中似乎不是真的!

我有我的Windows服务应用程序.我创建了一个主托管线程,其中隐藏的表单托管了第三个奇偶校验OCX.在这个线程中,我做消息在一个对象列表上进行轮询.此管理线程中的OCX触发的事件会修改此对象列表.

我在这里发布了我的代码的简化部分:

  public bool Start()
  {
     ServiceIsRunning = true;

     m_TaskThread = new Thread(new ParameterizedThreadStart(TaskLoop));
     m_TaskThread.SetApartmentState(ApartmentState.STA);
     m_TaskThread.Start(this);

     return true;
  }

  private void OnOCXEvent(object objToAdd)
  {
     lock(m_ObjectList)
     {
        m_ObjectList.Add(objToAdd);            }
     }
  }

  private void CheckList()
  {
     lock(m_ObjectList)
     {
        foreach(object obj in m_ObjectList)
        {
           ...
        }
     }
  }

  [STAThread] // OCX requirement!
  private void TaskLoop(object startParam)
  {
     try {

        ... 

        while (ServiceIsRunning)
        {
           // Message pump 
           Application.DoEvents();

           if (checkTimeout.IsElapsed(true))
           {
              CheckList();
           }

           // Relax process CPU time!
           Thread.Sleep(10);
        }
     } …
Run Code Online (Sandbox Code Playgroud)

c# multithreading thread-safety

-3
推荐指数
1
解决办法
215
查看次数

标签 统计

c# ×1

multithreading ×1

thread-safety ×1