Переменный доступ в нескольких потоках без синхронизации - PullRequest
1 голос
/ 15 сентября 2011

У меня следующий код

int i; //gobal var

Thread1:
{
...
  i=some value;
}

Thread2:
{
  if (i==2) dosomething();
  else dosomethingelse();
  i = 4;
}

Я хочу написать его, чтобы он был потокобезопасным без использования объектов синхронизации и стандартным способом C ++.

мои вопросы: как получить переменную для чтения / записи различными потоками без использования синхронизации? мое требование - иметь переменную bool, которая может иметь значение true или false.

Является ли переменная переменной атомной.

Обратите внимание, что я не должен использовать никаких библиотек, таких как TBB, у которых есть атомная переменная.

Причина, по которой мы задаем этот вопрос, мы не хотим брать и выпускать семфоры каждый раз, когда мы обращаемся к переменной в потоке, поскольку эта переменная менялась не очень часто.

1 Ответ

0 голосов
/ 15 сентября 2011

Ну, ваш код сейчас не имеет никакого значения. Becaues вы в основном говорите `

Thread2:
{
  if (i==2) dosomething();
  //let's do something if i is 2 at the moment I am reading it.
  else dosomethingelse();
  i = 4;
}`

Это нормально. Но если вы что-то делаете с i, значит, у вас проблемы. Если нет, и если вы спрашиваете, является ли доступ к i атомарным или нет, это зависит от архитектуры процессора. Например для x86 и x64 это атомарно. Прочитайте это .

...