using System;
using System.Runtime.InteropServices;
using System.Threading;
class program {
int sign = 1;
Semaphore mutex = new Semaphore(1, 1);
void print()
{
while (true)
{
if (sign > 0)
{
mutex.WaitOne();
sign = sign--;
for (int i = 0; i < 10; i++) Console.WriteLine(i);
sign = sign++;
mutex.Release();
break;
}
else Thread.Sleep(1000);
}
}
static void Main() {
program s = new program();
ThreadStart tt = new ThreadStart(s.print);
Thread t1 = new Thread(tt);
Thread t2 = new Thread(tt);
Thread t3 = new Thread(tt);
Thread t4 = new Thread(tt);
t1.Start();
t2.Start();
t3.Start();
t4.Start();
}
}
ThreadStart是委托类型,表示线程要执行的方法。
在这里,要执行的方法就是print函数。但不能写print()或者s.print(),因为print()只是一个返回值。s.print则是表示要执行这个方法。
然后创建四个线程,并开始执行
这里通过信号量实现了互斥访问:
int sign = 1; 计数器
Semaphore mutex = new Semaphore(1, 1); 信号量,第一个参数是初值,第二个参数是最大值
mutex.WaitOne(); 申请信号量
mutex.Release(); 释放信号量
Thread.Sleep(1000); 线程休眠 (单位是毫秒)