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

 
 
> TNKernel и удаление объектов синхронизации
kosyak©
сообщение Feb 27 2012, 15:21
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



Копаюсь в недрах TNKernel 2.6. В функциях удаления объектов синхронизации (семафор, мютекс) есть такой код (например функция удаления семафора):

Код
....

   while(!is_queue_empty(&(sem->wait_queue)))
   {
//!!!!!!!!!!!!!!!!!!!!!!!!!!!
      tn_disable_interrupt();

     //--- delete from the sem wait queue

      que = queue_remove_head(&(sem->wait_queue));
      task = get_task_by_tsk_queue(que);
      if(task_wait_complete(task))
      {
         task->task_wait_rc = TERR_DLT;
         tn_enable_interrupt();
         tn_switch_context();
      }
   }

....


Вопрос такой - а что если переключение контекста произойдет в момент отмеченный восклицательными знаками?
Т.е. очередь sem->wait_queue на момент проверки содержала один элемент, попали в цикл, произошло переключение контекста и из нее удалили единственный элемент. Дальше в коде нигде проверок чт из очереди что-то достали я не нашел.

Или я где-то не правильно рассуждаю?
Go to the top of the page
 
+Quote Post



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

 


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


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