下面的示例代码使用锁定的概念。但这阻止了它提供并行执行。那么问题的标题是否正确:在Threading程序中使用锁定机制是否等同于同步而不是异步执行代码?
相同情况是否适用于Threading.Monitor和具有[Synchronization]属性的声明类?
static void Main(string[] args)
{
Console.WriteLine("*****Synchronizing Threads *****\n");
Printer p = new Printer();
// Make 10 threads that are all pointing to the same
// method on the same object.
Thread[] threads = new Thread[10];
for (int i = 0; i < 10; i++)
{
threads[i] = new Thread(new ThreadStart(p.PrintNumbers));
threads[i].Name = string.Format("Worker thread #{0}", i);
}
// Now start each one.
foreach (Thread t in threads)
t.Start();
Console.ReadLine();
}
public void PrintNumbers()
{
// Use the private object lock token.
lock (threadLock)
{
// Display Thread info.
Console.WriteLine("-> {0} is executing PrintNumbers()",Thread.CurrentThread.Name);
// Print out numbers.
Console.Write("Your numbers: ");
for (int i = 0; i < 10; i++)
{
Random r = new Random();
Thread.Sleep(1000 * r.Next(5));
Console.Write("{0}, ", i);
}
Console.WriteLine();
}
}
在线程程序中使用锁定机制是否等效于同步执行代码,而不是异步执行代码?
特别是在您的示例中,您将整个方法调用与一个锁包装在一起,因此您将体验到同步行为,在这种情况下,线程化将是无用的,并且会提供比获得收益更多的开销。
很多时候,您有特定的位置在访问共享状态时需要锁定,而这通常是并行性的限制所在。但是,如果您有大量可以并行执行的CPU工作,您仍可能会获得计算上的好处。
附带说明一下,异步和并行处理之间是有区别的。我建议您阅读这篇文章,以更多地了解两者的含义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句