Это условие гонки? Если нет, могу ли я когда-нибудь написать такую ​​программу (эта программа НЕПРАВИЛЬНА)? - PullRequest
0 голосов
/ 26 февраля 2020

Я действительно новичок в многопоточном программировании. Действительно запутался в определении. Скажем, у меня есть два потока

x, y, z = 0;

Thread 1:
lock(x);
lock(y);
x = y + 1;
unlock(x);
unlock(y);

Thread 2:
lock(x);
lock(z);
z = x + 1;
unlock(x);
unlock(z);

Вы можете видеть, что значение z зависит от того, какой поток выполняется первым. Если поток 1 предшествует потоку 2, z = 2; если поток 2 выполняется первым, z = 1. Согласно многим существующим ответам, например, Это условие гонки? , я полагаю, что многие думают, что это не так. Но результат непредсказуем - зависеть от планирования потоков все еще звучит странно для меня. Это ошибка семантики c? Люди когда-нибудь пишут такие многопоточные программы? Спасибо за любые комментарии !!

...