操作系统实验二

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作一:在C#中用Mutex类实现线程的互斥

1.创建新C#项目,并将代码“Mutex_C#示例原代码.txt”复制到源文件中。

2.编写一个程序段(在“// Place code to access non-reentrant resources here.”下),

用于完成从0—30的递增并显示。

3.分别观察启用与不启用互斥体输出结果的差异。

4.采用互斥体的结果:

图一:线程互斥

图二:线程交叉

图三:杀死线程

进程被杀死之后:

线程同步:

此次试验所用的代码:

// This example shows how a Mutex is used to synchronize access // to a protected resource. Unlike Monitor, Mutex can be used with // WaitHandle.WaitAll and WaitAny, and can be passed across

// AppDomain boundaries.

using System;

using System.Threading;

class Test

{

// Create a new Mutex. The creating thread does not own the

// Mutex.

private static Mutex mut = new Mutex();

private const int numIterations = 1;

private const int numThreads = 3;

static void Main()

{

// Create the threads that will use the protected resource.

for (int i = 0; i < numThreads; i++)

{

Thread myThread = new Thread(new ThreadStart(MyThreadProc));

= String.Format("Thread{0}", i + 1);

myThread.Start();

}

Console.Read();

// The main thread exits, but the application continues to

// run until all foreground threads have exited.

}

private static void MyThreadProc()

{

for (int i = 0; i < numIterations; i++)

{

UseResource();

}

}

// This method represents a resource that must be synchronized

// so that only one thread at a time can enter.

private static void UseResource()

{

// Wait until it is safe to enter.

//mut.WaitOne();

Console.WriteLine("{0} has entered the protected area",

);

// Place code to access non-reentrant resources here.

// Simulate some work.

////int num = 0;

////while(true){

//// ++num;

//// if (num > 30) {

//// break;

//// }

//// Console.Write(num + " ");

//// Thread.Sleep(500);

////}

int num = 67;

char c;

while (true)

{

++num;

if(num>100){

break;

}

c = (char)num;

Console.Write(c + " ");

Thread.Sleep(300);

}

Console.Write("\n");

Console.WriteLine("{0} is leaving the protected area\r\n", );

// Release the Mutex.

//注释之后会产生进程交互

//mut.ReleaseMutex();

}

}

相关文档
最新文档