Безопасно ли изменять переменную без вычисления предыдущих данных? - PullRequest
2 голосов
/ 04 декабря 2010

Я слышал, что это небезопасно делать "global_variable + = Individual_thread_data"; например [без замков].

Но безопасен ли поток, если в каждом потоке только "global_variable = individual_thread_data"?

Ответы [ 2 ]

2 голосов
/ 04 декабря 2010

Без учета типа переменной это не потокобезопасно.Вы должны использовать мьютексы / критические секции или атомарные переменные.

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

Кроме того, для архитектуры с поддержкой cas вы можете использовать ассемблерный код для имитации атомарной переменной.

(Другой совет: переменная должна быть объявлена ​​как volatile, если она используется в потокахпредотвратить оптимизацию, выполненную компилятором.)

2 голосов
/ 04 декабря 2010

Нет , это так же небезопасно (другой поток может использовать эту переменную одновременно).

...