User Tag List

Показано с 1 по 10 из 1128

Тема: ЭТЮДЫ

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #26

    Регистрация
    19.06.2008
    Адрес
    Киров
    Сообщений
    374
    Спасибо Благодарностей отдано 
    27
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    99 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Покритикуйте такую идею для реализации критической секции. На emuverse.ru упоминается недокументированная команда LD DDD, rot [IX+d], которая производит битовый сдвиг байта в памяти и запись результата в регистр. Т.е. имеем две операции в рамках одной атомарной. Идея такова. Нулевой байт обозначает свободную секцию. Используем LD A, SLI [IX+d] (или SCF: LD A, RL [IX+d]). Поток, которые первый выполняет эту атомарную операцию занесет в секцию значение 1, последующие потоки будут заносить 3, 7, 15 и т.д., но никогда не 1. Т.е. наличие единицы в регистре A обозначает, что мы захватили секцию. Освобождение секции выполняется простым занесением нуля в секцию.

    Код:
    ;; если флаг Z при выходе функции включен, то зашли в секцию
    TryEnterCriticalSection:
      LD A, SLI [IX]
      DEC A
      RET
    
    EnterCriticalSection:
      LD A, SLI [IX]
      DEC A
      JR NZ, $ - 5
      RET
    
    LeaveCriticalSection:
      LD [IX], 0
      RET
    Update.

    Что-то я слишком все усложнил. Можно и на документированных командах это сделать. 0x80 - значение свободной секции.

    Код:
    ;; если флаг С при выходе функции включен, то зашли в секцию
    TryEnterCriticalSection:
      SLA (IX)
      RET
    
    EnterCriticalSection:
      SLA (IX)
      JR NC, $ - 4
      RET
    
    LeaveCriticalSection:
      LD [IX], 0x80
      RET
    Последний раз редактировалось Dec; 08.09.2025 в 22:29.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •