Syntax:
SyncRoot This property returns a synchronization object for the current array. Arrays are not inherently thread-safe. Synchronize access to the array with the synchronization object. |
virtual object SyncRoot{ get;}
|
Example:
Accesses to arrays are easily synchronized with the lock statement, where the SyncRoot object is the parameter.
using
System;
using System.Collections.Generic;
using System.Threading;
public class MyClass
{
public static void Main()
{
Array.Sort(zArray);
Thread t1 = new Thread(
new ThreadStart(DisplayForward));
Thread t2 = new Thread(
new ThreadStart(DisplayReverse));
t1.Start();
t2.Start();
RL();
}
private static int [] zArray = { 1 , 5 , 4 , 2 , 4 , 2 , 9 , 10 };
public static void DisplayForward() {
lock (zArray.SyncRoot) {
Console.Write( " Forward: " );
foreach ( int number in zArray) {
Console.Write(number + " " );
}
}
}
public static void DisplayReverse() {
lock (zArray.SyncRoot) {
Array.Reverse(zArray);
Console.Write( " Reverse: " );
foreach ( int number in zArray) {
Console.Write(number + " " );
}
Array.Reverse(zArray);
}
}
#region Helper methods
private static void WL( object text, params object [] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
}
#endregion
}
using System.Collections.Generic;
using System.Threading;
public class MyClass
{
public static void Main()
{
Array.Sort(zArray);
Thread t1 = new Thread(
new ThreadStart(DisplayForward));
Thread t2 = new Thread(
new ThreadStart(DisplayReverse));
t1.Start();
t2.Start();
RL();
}
private static int [] zArray = { 1 , 5 , 4 , 2 , 4 , 2 , 9 , 10 };
public static void DisplayForward() {
lock (zArray.SyncRoot) {
Console.Write( " Forward: " );
foreach ( int number in zArray) {
Console.Write(number + " " );
}
}
}
public static void DisplayReverse() {
lock (zArray.SyncRoot) {
Array.Reverse(zArray);
Console.Write( " Reverse: " );
foreach ( int number in zArray) {
Console.Write(number + " " );
}
Array.Reverse(zArray);
}
}
#region Helper methods
private static void WL( object text, params object [] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
}
#endregion
}
o(∩_∩)o...