科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件实例解析C++/CLI线程之多任务

实例解析C++/CLI线程之多任务

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

从处理器的角度来看,线程是一个单独的执行流程,每个线程都有各自的寄存器及堆栈上下文。

作者:谢启东编译 来源:天极开发 2007年11月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
 一般来说,使用同步锁的目的,是为了使用父类函数的实例对象,然而,我们在不需要这些对象实际包含任何信息的情况下,也能"创造"出锁对象和同步机制。请看例4,类C有一个名为Lock的同步锁,其并未包含任何数据,且除了一个同步锁外,从未进行初始化或使用在任何上下文中。但在函数F3与F4中,则分别包含了一些语句,各自在运行时必须阻塞对方的运行。

  例4:

using namespace System::Threading;

public ref class C
{
 /*1*/ static Object^ Lock = gcnew Object;

 public:
  static void F1()
  {
   /*2*/ Monitor::Enter(C::typeid);
   /*3*/ try {
    //执行一些操作
   }
   finally {
    Monitor::Exit(C::typeid);
   }
  }

  static void F2()
  {
   Monitor::Enter(C::typeid);
   // ...
   Monitor::Exit(C::typeid);
  }

  static void F3()
  {
   /*4*/ Monitor::Enter(Lock);
   // ...
   Monitor::Exit(Lock);
  }

  static void F4()
  {
   Monitor::Enter(Lock);
   // ...
   Monitor::Exit(Lock);
  }
};

  如果一个类函数(而不是一个实例函数)需要同步,可使用typeid操作符来包含一个锁对象,如标记2中所示。对每个CLI类型而言,都有一个锁对象,同样,对类型的每个实例而言,也有一个锁对象。类上的同步锁意味着在同一时刻,只能执行一个类函数。

  注意标记3中的try/finally,一般而言,如果同步锁中的执行正常完成,将如前面的例子一样,正常地调用Monitor::Exit;但是,如果在同步锁中抛出了一个异常,将不会调用到Exit,因为正常的执行流程已经被中断了。那么我们要做的就是,如果同步锁中可能存在一丝机会发生异常--不管是同步锁中直接或是间接调用的任何函数,我们都必须加上try/finally语句块,这样的话,不管是同步锁的正常或非正常退出,都会调用到Exit了。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章