c# Синхронизация в многопоточности, которая запускает 2 потока бесконечно и обновляет общий ресурс в порядке по потоку 1, а затем по потоку 2 - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в многопоточности. Ниже приводится объяснение сценария многопоточности. Это фрагмент кода того, что я сделал до сих пор.

main()
{
   Thread1(function1);
   Thread2(function2);
   Thread1.start();
   Thread2.start();
}


function1()
{
  do
  {
   parameter1=true;
   CommonFunction();------>both the thread uses this same function
  }while(runFunction1==true);
 }

function2()
{
  do
  {
   parameter2=true;
   CommonFunction();------>both the thread uses this same function
  }while(runFunction2==true);
 }


CommonFunction()
{
  mutex.WaitOne();

 if(parameter1==true)
  Function_1_Operation(SharedVariable);---->This function will update SharedVariable.x
 if(parameter2==true)
  Function_2_Operation(sharedVariable);---->This function will update SharedVariable.y

 mutex.Releasemutex();
}

sharedVariable должна быть обновлена ​​сначала функцией thread1, а затем потоком 2 (синхронизировано). Моя цель - бесконечно обновлять значения sharedvariable в паре.

Мне также нужна помощь с тем, где sharedvariable.clear() после обновления каждой пары, чтобы при следующем запуске можно было использовать новую sharedVariable

Вывод приведенного выше кода настолько случайен. иногда он фиксируется правильно, иногда либо sharedVariable.x равно 0, либо sharedVariable.y равно 0, либо оба.

thread.join() здесь не работает, поскольку оба потока работают бесконечно.

Что будет ли эффективный способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...