Я новичок в C# и хочу задать вам вопрос. Вопрос о «parallell обновление переменной»Confused about paralell update a variable
Мой код ниже:
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
// ---------------------------
Thread tTrue = new Thread(new ThreadStart(TrueThread));
tTrue.Start();
Thread tFalse = new Thread(new ThreadStart(FalseThread));
tFalse.Start();
}
bool Start = false;
bool value;
void TrueThread()
{
while (true)
{
if (Start == true)
{
value = true;
break;
}
}
}
void FalseThread()
{
while (true)
{
if (Start == true)
{
value = false;
break;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(value.ToString());
}
private void button2_Click(object sender, EventArgs e)
{
Start = true;
}
Код объясняю: Во-первых, когда мой запуск приложения -> звоните TrueThread и FalseThread При запуске TrueThread и FalseThread, они будут проверять Значение «Старт», когда переменная «Старт» станет «истиной» (по умолчанию false, при нажатии кнопки «2» будет установлено значение «истина»), TrueThread установит значение «значение» varibale в значение true, а FalseThread установит значение «значение» в значение false.
Но я смутился, какой поток будет запущен первым? и конечное значение «value» будет истинным или ложным? и почему ?
Нажмите Button1, чтобы увидеть результат
Можете ли вы дать мне правильную синхронизацию в этой ситуации? –
Спасибо @xxbbcc, я думаю, я должен изменить свое решение о многопоточности –
@viclic Спасибо, что приняли мой ответ. Я предполагаю, что вы новичок в многопоточности - если да, подумайте, почему вы хотите использовать несколько потоков. Они редко просты в использовании в реальных приложениях. Я не пытаюсь сказать вам не использовать потоки, но если вы это сделаете, убедитесь, что вы понимаете, почему вы их используете.Если вы еще не прочитали его, прочитайте этот вопрос (особенно ответ Эрика Липперта): http://stackoverflow.com/questions/19382705/c-sharp-volatile-keyword-usage-vs-lock – xxbbcc