Listing 3: A lock block

#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;

class ArrayManip
{
public:
   static int TotalValues(int array __gc[])
   {
/*1*/      int sum = 0;

/*2*/      Monitor::Enter(array);
      for (int i = 0; i < array.Length; ++i)
      {
         sum += array[i];
      }
      Monitor::Exit(array);

      return sum;
   }

   static void SetAllValues(int values __gc[], int newValue)
   {
/*3*/      Monitor::Enter(values);
      for (int i = 0; i < values.Length; ++i)
      {
         values[i] = newValue;
      }
      Monitor::Exit(values);
   }
— End of Listing —