Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Prints: "SSSSSSSSSSAABABAABABAABABABBBB" (result may vary due to threading)
- using System.Threading;
- using System;
- namespace test
- {
- //main class
- class Program
- {
- static void Main(string[] args)
- {
- Q q = new Q();
- for (int i = 0; i < 10; i++)
- {
- Console.Write("S");
- new Thread(delegate() { q.DoStuff(); }).Start();
- }
- Console.ReadKey(true);
- }
- }
- //test class
- public class Q
- {
- private static object lockA;
- private static object lockB;
- public Q()
- {
- lockA = new object();
- lockB = new object();
- }
- public object DoStuff()
- {
- object result;
- lock (lockA)
- {
- result=A();
- }
- lock (lockB)
- {
- return B(result);
- }
- }
- private object A()
- {
- //do long work
- Thread.Sleep(2000);
- Console.Write("A");
- return new object();
- }
- private object B(object ResultA)
- {
- //do long work
- Thread.Sleep(3000);
- Console.Write("B");
- return new object();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement