【发布时间】:2021-12-31 02:37:35
【问题描述】:
我正在练习 C# 中的线程和并发性,并尝试使用一个线程进行偶数排序和另一个线程进行奇数排序来实现基本的奇偶排序算法。
static bool Sort(int startPosition, List<int> list)
{
bool result = true;
do
{
for (int i = startPosition; i <= list.Count - 2; i = i + 2)
{
if (list[i] > list[i + 1])
{
int temp = list[i];
list[i] = list[i + 1];
list[i + 1] = temp;
result = false;
}
}
} while (!result);
return result;
}
而main方法是这样的:
static void Main(string[] args)
{
bool isOddSorted = false;
bool isEvenSorted = false;
List<int> list = new List<int>();
while (list.Count < 15)
{
list.Add(new Random().Next(0, 20));
}
var evenThread = new Thread(() =>
{
isEvenSorted = Sort(0, list);
});
evenThread.Start();
var oddThread = new Thread(() =>
{
isOddSorted = Sort(1, list);
});
oddThread.Start();
while (true)
{
if (isEvenSorted && isOddSorted)
{
foreach (int i in list)
{
Console.WriteLine(i);
}
break;
}
}
}
可以理解,Sort 方法中的循环永远有效,因为结果变量永远不会设置为 true。然而,它的工作方式设法对列表进行排序。它只是不会随时中断。
但是,当我在 Sort 函数的 do-scope 的第一行添加“result = true”时,排序就搞砸了。
我不知道如何解决这个问题。
【问题讨论】:
-
您的目标只是编写一个能正常工作的多线程奇偶排序实现,还是希望该实现比原始单线程实现更快地对数字进行排序?
标签: c# multithreading sorting parallel-processing