Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с OS::TMutex::Unlock()
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
Михаил_p51x
Есть процесс с приоритетом OS::pr4. В нем вызывается функция, примерно следующего содержания:
Код
  UMutex.Lock();

  ret = func();

  if(ret)
  {
    UMutex.Unlock();
    return ret;
  }


Если на UMutex.Unlock(); приходит с ProcessMap = 0, то все работает.
Если ProcessMap != 0, то внутри Unlock() все отрабатыватывает вроде верно. Но после возврата в этот процесс (т.е. на return ret;) получается, что ValueTag вдруг стал != 0... Соответственно, мьютекс больше не захватится.
Сергей Борщ
Цитата(Михаил_p51x @ Jun 20 2010, 05:51) *
Если ProcessMap != 0, то внутри Unlock() все отрабатыватывает вроде верно. Но после возврата в этот процесс (т.е. на return ret;) получается, что ValueTag вдруг стал != 0
Если ProcessMap !=0, значит какой-то другой процесс тоже хочет захватить этот Mutex. Внутри Unlock() после освобождения мутекса наиболее активный процесс из ProcessMap переводится в активное состояние и, если его приоритет выше приоритета текущего прооцесса, он сразу же получит управление. Получив управление этот второй процесс захватит мутекс, отсюда value !=0. А вот почему он его больше не освобождает - ищите в логике своей программы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.