fork(1) download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4.  
  5. static class Program
  6. {
  7. private static Queue<int> q = new Queue<int>();
  8.  
  9. static void Main(string[] args)
  10. {
  11. Thread[] thrds = new Thread[100];
  12. for (int i = 0; i < 100; i++)
  13. {
  14. thrds[i] = new Thread(do_safe);
  15. //thrds[i] = new Thread(do_unsafe); // <--
  16. thrds[i].Start(i);
  17. }
  18.  
  19. for (int i = 0; i < 100; i++)
  20. {
  21. thrds[i].Join();
  22. }
  23.  
  24. foreach (int i in q)
  25. {
  26. Console.WriteLine(i);
  27. }
  28. }
  29. private static void do_safe(object k)
  30. {
  31. int val = (int)k;
  32. for (int i = 0; i < 100; i++) // do something
  33. {
  34. val += i;
  35. Thread.Sleep(1);
  36. }
  37.  
  38. lock (q)
  39. q.Enqueue(val); // with locking
  40. }
  41. private static void do_unsafe(object k)
  42. {
  43. int val = (int)k;
  44. for (int i = 0; i < 100; i++) // do something
  45. {
  46. val += i;
  47. Thread.Sleep(1);
  48. }
  49.  
  50. q.Enqueue(val); // without locking
  51. }
  52. }
  53.  
Runtime error #stdin #stdout #stderr 0.02s 50632KB
stdin
Standard input is empty
stdout
ves_icall_System_Threading_Thread_Thread_internal: CreateThread error 0x0
stderr
Unhandled Exception: System.SystemException: Thread creation failed.
  at System.Threading.Thread.Start () [0x00000] in <filename unknown>:0 
  at System.Threading.Thread.Start (System.Object parameter) [0x00000] in <filename unknown>:0 
  at Program.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.SystemException: Thread creation failed.
  at System.Threading.Thread.Start () [0x00000] in <filename unknown>:0 
  at System.Threading.Thread.Start (System.Object parameter) [0x00000] in <filename unknown>:0 
  at Program.Main (System.String[] args) [0x00000] in <filename unknown>:0