建立一个控制台程序,建立四个线程,每个线程的功能为:输出0-9 共计10个数字,要求线程的输出为连续输出,借助信号量或者互斥锁进行实现。C#
时间: 2024-02-17 21:03:07 浏览: 107
C# 控制台程序
4星 · 用户满意度95%
好的,以下是一个使用C#实现线程同步的示例程序,它创建了四个线程,每个线程的功能为:输出0-9共计10个数字,要求线程的输出为连续输出,借助信号量进行实现。
```csharp
using System;
using System.Threading;
namespace ThreadSync
{
class Program
{
static SemaphoreSlim sem1 = new SemaphoreSlim(1, 1);
static SemaphoreSlim sem2 = new SemaphoreSlim(1, 1);
static SemaphoreSlim sem3 = new SemaphoreSlim(1, 1);
static SemaphoreSlim sem4 = new SemaphoreSlim(1, 1);
static void Main(string[] args)
{
Thread thread1 = new Thread(new ThreadStart(PrintNumbers1));
Thread thread2 = new Thread(new ThreadStart(PrintNumbers2));
Thread thread3 = new Thread(new ThreadStart(PrintNumbers3));
Thread thread4 = new Thread(new ThreadStart(PrintNumbers4));
thread1.Start();
thread2.Start();
thread3.Start();
thread4.Start();
thread1.Join();
thread2.Join();
thread3.Join();
thread4.Join();
Console.WriteLine("Done!");
}
static void PrintNumbers1()
{
for (int i = 0; i < 10; i++)
{
sem1.Wait();
Console.Write(i);
sem2.Release();
}
}
static void PrintNumbers2()
{
for (int i = 0; i < 10; i++)
{
sem2.Wait();
Console.Write(i);
sem3.Release();
}
}
static void PrintNumbers3()
{
for (int i = 0; i < 10; i++)
{
sem3.Wait();
Console.Write(i);
sem4.Release();
}
}
static void PrintNumbers4()
{
for (int i = 0; i < 10; i++)
{
sem4.Wait();
Console.Write(i);
sem1.Release();
}
}
}
}
```
在这个程序中,我们首先定义了四个信号量:`sem1`、`sem2`、`sem3`、`sem4`,每个信号量的初始值都为1。然后,我们创建了四个线程,每个线程都有一个循环,循环输出0-9共计10个数字。
为了保证输出的连续性,我们使用了信号量进行同步。线程1先获取`sem1`的信号量,输出一个数字后释放`sem2`的信号量,线程2获取`sem2`的信号量,输出一个数字后释放`sem3`的信号量,线程3获取`sem3`的信号量,输出一个数字后释放`sem4`的信号量,线程4获取`sem4`的信号量,输出一个数字后释放`sem1`的信号量。这样,四个线程就可以依次输出数字,保证了输出的连续性。
这个程序只是一个简单的演示,你可以根据自己的需要进行修改和扩展。希望这个程序能够帮助到你!
阅读全文