OS/2.GURU LibraryReviews / articles about OS/2 eComStation ArcaOS  | 
Operating systems ArcaOS, eComStation, IBM OS/2 Warp  | 
    
 
     | 
  
      
           
  | 
   
| 
 
      | 
      
 
 
 DATE: 2012-08-11 17:56:09 AUTHOR: Capricorn 
 
 
 ВведениеЛюбой программист, который пишет софт для многозадачной OS (а в наши дни других фактически не существует) рано или поздно сталкивается с необходимостью обеспечить взаимодействие между несколькими программами, которые должны работать в связке. В OS/2 для этой цели существует несколько механизмов: семафоры, пайпы, общая (разделяемая) память, очереди. Если с первыми двумя всё более-менее понятно и программисты активно используют их, то очереди и общая память почему-то обделены вниманием. На мой взгляд, совершенно незаслуженно. Цель данной статьи - подробно рассмотреть данные механизмы и дать рекомендации по их использованию. Но сначала, рассмотрим первые два. 
 СемафорыСемафоры служат одной цели: синхронизации процессов. У семафора всегда есть 2 состояния: "занят" и "свободен". Суть синхронизации состоит в том, что соответствующая команда ожидания проверяет, занят ли семафор, и если да, замораживает Всего существует 2 вида семафоров: ивэнты и мутексы. а) Семафор типа "event" ("событие") нужен для того, чтобы позволить одному треду дождаться, пока другой тред выполнит некоторую задачу. Пример: /*************/ /* */ /* Процесс 1 */ /* */ /*************/ #define INCL_DOS #include   /*************/ /* */ /* Процесс 2 */ /* */ /*************/ 
 Трубы (pipes)[дополнение] 
 Разделяемая память[дополнение] 
 ОчередиЕщё один способ взаимодействия между процессами - очереди (queues). Как уже говорилось ранее, очереди почему-то обойдены вниманием в пользу труб (pipes). На мой взгляд, совершенно незаслуженно. Очень часто очереди оказываются намного удобнее. Но, всё по-порядку. Итак, очередь представляет собой механизм обмена сообщениями. Они чем-то напоминают очереди сообщений Presentation Manager'а, но есть существенные различия, поэтому не стоит их путать. Главное различие состоит в том, что не смотря на название, очереди могут работать не только в режиме собственно, очередей (FIFO), но и в режиме стека (LIFO), а также, по приоритетам. Очереди всегда именованные. Чаще всего, один процесс (тред), который мы условно назовём сервером, создаёт очередь и слушает его, другие (назовём их клиентами), открывают её и пишут туда сообщения. Разумеется, для прослушивани очереди логично организовать цикл. Пример: /**********************/ /* */ /* Процесс 1 (сервер) */ /* */ /**********************/ #define INCL_DOS #include   /**********************/ /* */ /* Процесс 2 (клиент) */ /* */ /**********************/ #define MSG_QUIT 0x0001 /* Идентификатор сообщения для завершения цикла */ #define QUEUE_NAME "\\QUEUES\\special.que" /* Имя очереди. * Должно иметь префикс \QUEUES\ #define INCL_DOS #include В данном примере мы первый процесс создаёт и слушает очередь. Другой процесс открывает очередь и записывает туда определённое нами сообщение о завершении работы (MSG_QUIT). Первый процесс, получив это сообщение, завершает свою работу. Обратите внимание, что функция DosCloseQueue() по сути, удаляет хэндл очереди. Как только все хэндлы очереди будут удалены, удалится и сама очередь. Так в чём же преимущество очередей перед трубами? Дело в том, что при использовании труб мы фактически имеем дело с непрерывным потоком данных. Это удобно, когда необходимо постоянно передавать большие объёмы данных. Но такие случаи очень редки. Чаще бывает нужно, чтобы один процесс сообщал другому о неких событиях или передавал какие-то команды, на которые другой процесс должен реагировать. В данном случае очереди гораздо удобнее, т. к. сообщение, помещённое в очередь как раз и является такой командой.   
 Comments: 
  | 
      
 
      | 
   |||||||||||||
 
 
| 
 
 ArcaOS 5.1.1 whatsnew - PNG iconsPNG icons on Desktop PNG icons on Desktop. (instead of ancient .ico designed in 1994)  | 
    
 
 Russian OS/2eCo Software is making russian eComStation since 2001, all versions of ArcaOS since 2017.  | 
    
// надо на  ENG!!
 | 
 
 
| Every conference is important. | 
 
 Warpstock Europe 2017
Interview with Lars Erdmann
 What was happening at that conference?  |