Я строю программу в C# с 2 потоками, которые используют один и тот же объект. первый поток обновляет значение объекта, а второй поток печатает его до GUI.
. Я ищу наиболее correct
или clean
способ реализации механизма блокировки между потоками.
пример реализации, которую я имею в моей программе (не в самой программе):
namespace Test___Console
{
public class Custom
{
public static object lockinObject = new object();
public string name;
public int value;
public Custom(string name)
{
this.name = name;
}
}
public class Program
{
public static object lockinObject = new object();
static Thread firstThread;
static Thread secondThread;
static public Custom someData;
static void Main(string[] args)
{
someData = new Custom("first");
firstThread = new Thread(FirstThreadFunctions);
secondThread = new Thread(SecondThreadFunctions);
firstThread.Start();
secondThread.Start();
do
{
} while (true);
}
static void FirstThreadFunctions()
{
Random rnd = new Random();
do
{
someData.value = rnd.Next();
Thread.Sleep(1000);
} while (true);
}
static void SecondThreadFunctions()
{
do
{
Console.WriteLine(someData.value.ToString());
Thread.Sleep(1000);
} while (true);
}
}
}
Я думал о 3 способах блокировки объекта someData
1.add get установить с объектом блокировки объект someData.
2.add получить с объектом блокировки переменные пользовательского класса.
3. инкапсулировать все сегменты кода, которые используют один и тот же объект данных с блокировкой операторы (мой наименее любимый метод).
У меня нет большого опыта программирования, поэтому я спрашиваю вас, каков "правильный" или "самый чистый" способ решения этой проблемы.
Спасибо