У меня было это как вопрос интервью некоторое время назад, но я не был уверен в ответе.Требования к блокировке многопоточности
Если вы подсчитаете c = c + 1 со 100 потоками, вам нужен замок?
У меня было это как вопрос интервью некоторое время назад, но я не был уверен в ответе.Требования к блокировке многопоточности
Если вы подсчитаете c = c + 1 со 100 потоками, вам нужен замок?
Да. Причина заключается в том, что утверждение c = c + 1
на самом деле (о) три заявления низкого уровня:
1. read c from the memory
2. increment c by one
3. store c back to the memory
Если две нити выполняют (1)
, они оба приращения c
к тому же значению и хранить его. Поэтому вместо того, чтобы увеличиваться дважды, c
будет увеличиваться только один раз.
Да, практически во всех языках программирования, поддерживающих параллелизм.
Я думаю, что это будет зависеть от языка/модели памяти –
Да; но вы можете использовать 'Interlocked' (или другую атомную реализацию), чтобы избежать блокировки –
, если бы я был вами, я устанавливаю критический раздел вместо блокировки. Поскольку все потоки работают одинаково – Dauezevy