У вас есть два потока, один из которых выполняет функцию f1(), а другой работает f2(). Иногда f1 никогда не заканчивается, несмотря на то, что все отпечатки f2 видны. Объясните, как это может произойти и дать решение?Несколько резьбовых двух нитей достигают одной и той же точки
int _f2_finished = 0;
Void f1()
{
print(“f1 waiting “);
while (!_f2_finished) {usleep(50);}
print(“share of work”);
}
void f2()
{
Printf(“f2 doing some stuff”);
usleep(5*1000*1000);
Printf(“f2 signaling finished”);
_f2_finished = 1;
Printf(“f2 signaled finished”);
}
Я пытался ее решить, я не мог понять, как прийти f1() остается застрял в петле в то время как, несмотря на все, что сообщения о f2 напечатанного смысла _f2_finished является 1, который выходит из времени цикла?
Это C язык и платформа для окон.
Что библиотеки потоков или потоковой модели вы используете? Что он говорит о доступе к объекту в одном потоке, а другой поток, или, возможно, его модифицирует? –