56
1
using System;
2
using System.Threading;
3
using System.Threading.Tasks;
4
5
public class Program
6
{
7
public static void Main()
8
{
9
Console.WriteLine("--- started ---");
10
/*initialization is thread safe*/
11
MyClass.MyClassInstance.Value.SomeFunction();
12
MyClass.MyClassInstance.Value.SomeFunction();
13
MyClass.MyClassInstance.Value.SomeFunction();
14
15
//first batch with no locking
16
/*After initilization , function calls are not thread safe. Response from below 3 tasks WILL NOT guarantee 1,2 and 3 response.*/
17
Task task1 = Task.Factory.StartNew(()=>{MyClass.MyClassInstance.Value.SetVal(1);});
18
Task task2 = Task.Factory.StartNew(()=>{MyClass.MyClassInstance.Value.SetVal(2);});
19
Task task3 = Task.Factory.StartNew(()=>{MyClass.MyClassInstance.Value.SetVal(3);});
20
21
//second batch with locking
22
/*The object needs to be locked, to be thread safe. Response from below 3 tasks WILL guarantee 1,2 and 3 response.*/
23
Task task4 = Task.Factory.StartNew(()=>{MyClass.MyClassInstance.Value.SetValWithLock(1);});
24
Task task5 = Task.Factory.StartNew(()=>{MyClass.MyClassInstance.Value.SetValWithLock(2);});
Cached Result