Представьте, что вы используете параллелизм в многоядерной системе.
Разве не возможно, что одни и те же инструкции могут выполняться одновременно?
Возьмите следующий код:
int i = 0;
if( blockingCondition )
{
lock( objLock )
{
i++;
}
}
Мне кажется, что в системе с несколькими ядрами и параллелизмом вполне возможно, что блокирующее условие может быть проверено в один и тот же момент, что приведет к попытке блокировки в один и тот же момент и т. Д. Это правда?
Если так, как вы можете обеспечить синхронизацию между процессорами?
Кроме того, .net TPL обрабатывает этот тип синхронизации? А как насчет других языков?
EDIT
Обратите внимание, что это не о потоках, а Tasks и Parallel-Processisng.
РЕДАКТИРОВАТЬ 2
ОК, спасибо за информацию всем. Так правда ли, что ОС обеспечит сериализацию записи в память, обеспечивая многоядерную синхронизацию через энергозависимые операции чтения?