/mobile Handheld Friendly website

 performance measurements

Each table row shows performance measurements for this C# Mono program with a particular command-line input value N.

 N  CPU secs Elapsed secs Memory KB Code B ≈ CPU Load
500,0009.054.7020,556476  37% 35% 38% 73%
5,000,00086.3244.1421,868476  39% 38% 52% 53%
50,000,000872.34444.8320,524476  39% 40% 43% 62%

Read the ↓ make, command line, and program output logs to see how this program was run.

Read thread-ring benchmark to see what this program should do.

 notes

Mono Runtime Engine version 3.2.5 (master/4c1198f Tue Oct 29 09:53:35 PDT 2013)
LLVM: yes(3.3svn-mono-mono/8bdedb5)
GC: sgen

An Introduction to Programming with C# Threads (pdf).

 thread-ring C# Mono program source code

/* The Computer Language Benchmarks Game
   http://benchmarksgame.alioth.debian.org/
 * contributed by Isaac Gouy
 */

using System;
using System.Threading;


internal class NamedThread
{
   private int name;
   private AutoResetEvent signal = new AutoResetEvent(false);
   private int token = 0;

   internal NamedThread(int name) {
      this.name = name;
   }

   internal void Run() {
      while (TokenNotDone()) 
         NextThread().TakeToken(token-1);

      if (token == 0) Console.WriteLine(name);
      NextThread().TakeToken(-1);
   }

   private bool TokenNotDone() {
      signal.WaitOne();
      return token > 0;
   }

   internal NamedThread NextThread() {
      return ThreadRing.threadRing[ name % ThreadRing.numberOfThreads ];
   }

   internal void TakeToken(int x) {
      token = x;
      signal.Set();
   }
}


public class ThreadRing
{
   internal const int numberOfThreads = 503;
   internal static NamedThread[] threadRing = new NamedThread[503];

   public static void Main(string[] args) {
      for (int i = 0; i < numberOfThreads; i++){ 
         threadRing[i] = new NamedThread(i+1);
      }

      foreach (NamedThread t in threadRing) 
         new Thread(new ThreadStart(t.Run)).Start(); 

      threadRing[0].TakeToken( int.Parse(args[0]) );
   }
}

 make, command-line, and program output logs

Tue, 29 Oct 2013 22:53:01 GMT

MAKE:
mv threadring.csharp threadring.cs
/usr/local/bin/mcs  -optimize+ -platform:x64 -out:threadring.csharp_run threadring.cs
rm threadring.cs
0.21s to complete and log all make actions

COMMAND LINE:
/usr/local/bin/mono --llvm --gc=sgen threadring.csharp_run 50000000

PROGRAM OUTPUT:
292

Revised BSD license

  Home   Conclusions   License   Play