2015-02-02 6 views
1

У меня было это как вопрос интервью некоторое время назад, но я не был уверен в ответе.Требования к блокировке многопоточности

Если вы подсчитаете c = c + 1 со 100 потоками, вам нужен замок?

+0

Я думаю, что это будет зависеть от языка/модели памяти –

+1

Да; но вы можете использовать 'Interlocked' (или другую атомную реализацию), чтобы избежать блокировки –

+0

, если бы я был вами, я устанавливаю критический раздел вместо блокировки. Поскольку все потоки работают одинаково – Dauezevy

ответ

1

Да. Причина заключается в том, что утверждение c = c + 1 на самом деле (о) три заявления низкого уровня:

1. read c from the memory 
2. increment c by one 
3. store c back to the memory 

Если две нити выполняют (1), они оба приращения c к тому же значению и хранить его. Поэтому вместо того, чтобы увеличиваться дважды, c будет увеличиваться только один раз.

0

Да, практически во всех языках программирования, поддерживающих параллелизм.

Смежные вопросы