реклама на сайте
подробности

 
 
> Проблема с OS::TMutex::Unlock(), OS::TMutex::Unlock(), port IAR ARM7
Михаил_p51x
сообщение Jun 20 2010, 02:51
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 30-07-08
Пользователь №: 39 317



Есть процесс с приоритетом OS::pr4. В нем вызывается функция, примерно следующего содержания:
Код
  UMutex.Lock();

  ret = func();

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


Если на UMutex.Unlock(); приходит с ProcessMap = 0, то все работает.
Если ProcessMap != 0, то внутри Unlock() все отрабатыватывает вроде верно. Но после возврата в этот процесс (т.е. на return ret;) получается, что ValueTag вдруг стал != 0... Соответственно, мьютекс больше не захватится.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
Сергей Борщ
сообщение Jun 20 2010, 07:30
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 01:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01341 секунд с 7
ELECTRONIX ©2004-2016