登录 / 注册
IT168技术开发频道
IT168首页 > 技术开发 > 技术开发技术 > 正文

进程的管理:浅谈进程同步和互斥的概念

2012-04-20 00:07    来源:博客  作者: 宋沄剑 编辑: 李健

  【IT168 技术】简介:进程同步是一个操作系统级别的概念,是在多道程序的环境下,存在着不同的制约关系,为了协调这种互相制约的关系,实现资源共享和进程协作,从而避免进程之间的冲突,引入了进程同步。

  临界资源

  在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界资源。典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量和数据等(如果这类资源不被看成临界资源加以保护,那么很有可能造成丢数据的问题)。

  对于临界资源的访问,必须是互诉进行。也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。而进程内访问临界资源的代码被成为临界区。

  对于临界区的访问过程分为四个部分:

  1.进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞

  2.临界区:在临界区做操作

  3.退出区:清除临界区被占用的标志

  4.剩余区:进程与临界区不相关部分的代码

  进程间同步和互诉的概念

  进程同步

  进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。

  比如说进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程B因为读取不到信息而被阻塞。而当进程A产生信息放入缓冲区时,进程B才会被唤醒。概念如图1所示。

  1

图1.进程之间的同步

  用C#代码模拟进程之间的同步如代码1所示。

  class ProcessSyn

  {

  
private static Mutex mut = new Mutex();

  static void Main()

  {

  Console.WriteLine(
"进程1执行完了进程2才能执行.......");

  Thread Thread1
= new Thread(new ThreadStart(Proc1));

  Thread Thread2
= new Thread(new ThreadStart(Proc2));

  Thread1.Start();

  Thread2.Start();

  Console.ReadKey();

  }

  
private static void Proc1()

  {

  mut.WaitOne();

  Console.WriteLine(
"线程1执行操作....");

  Thread.Sleep(
3000);

  mut.ReleaseMutex();
//V操作

  }

  
private static void Proc2()

  {

  mut.WaitOne();
//P操作

  Console.WriteLine(
"线程2执行操作....");

  mut.WaitOne();

  }

  }

 

  代码1.C#模拟进程之间的同步

  运行结果如图2所示。

  2

  图2.运行结果

标签: Visual C# , c#
  • 2012-04-20
  • 2012-04-20
  • 2012-04-20
  • 2012-04-20
  • 2012-04-20
网友评论
已有0条评论
  • IT168企业级IT168企业级
  • IT168文库IT168文库

扫码送文库金币

编辑推荐
系统架构师大会
系统架构师大会
点击或扫描关注
IT168企业级微信关注送礼
IT168企业级微信关注送礼
扫描关注
首页 评论 返回顶部