синхронизация потоков - деликатный вопрос - PullRequest
1 голос
/ 17 декабря 2009

давайте у меня будет этот цикл:

static a;
for (static int i=0; i<10; i++)
{
   a++;
   ///// point A
}

в этот цикл входит 2 темы ...

я в чем-то не уверен .... что произойдет, если thread1 попадет в POINT A, оставайтесь там, пока THREAD2 попадет в цикл 10 раз, но после 10-го цикла после увеличения значения i до 10 перед проверкой значения I, если оно меньше 10, Поток 1 выходит из цикла и, предположим, увеличим i и снова попадем в цикл. какое значение будет увеличивать Thread1 (который я увижу)? это будет 10 или 0?

возможно, что Thread1 увеличит i до 1, а затем поток 2 снова попадет в цикл 9 раз (а может быть, 8, 7 и т. Д.)

спасибо

Ответы [ 11 ]

0 голосов
/ 17 декабря 2009

Да, возможно, что любой поток может выполнять большую часть работы в этом цикле. Но, как объяснил Dynite, это никогда не будет (и должно) появляться в реальном коде. Если проблема связана с синхронизацией, вы должны предоставить взаимное исключение (Boost, pthread или Windows Thread) мьютекс для предотвращения таких условий гонки, как этот.

...