iTron дата-очередь в linux - PullRequest
       23

iTron дата-очередь в linux

1 голос
/ 10 апреля 2009

В iTron есть более легкая версия очереди сообщений, называемая очередью данных. Они очень просты в использовании для быстрой передачи сообщений. Есть ли эквивалентный примитив синхронизации в Linux?

Определение очереди данных: это очередь сообщений на одно слово

Ответы [ 2 ]

2 голосов
/ 14 апреля 2009

В тех немногих случаях, когда мне нужно было реализовать собственную очередь сообщений, я склонен использовать 1 семафор и 1 мьютекс (или семафор) для каждой очереди. Я имел дело только с очередями на уровне потоков, так что это, вероятно, неприменимо, если вы хотите очередь между двумя процессами.

Семафор используется для подсчета количества сообщений в очереди и обеспечения механизма ОС для потока, который приостанавливает / ожидает новые сообщения.

Мьютекс используется для защиты общей структуры очереди.

Итак, это может выглядеть примерно так (очень много псевдокода):

DataQueueRx( Queue*, WORD*, timeout? )
{
   WaitOnSemaphore( Queue->sema, timeout? );  //get token
   LockMutex
   {
      //manipulate your queue, and transfer the data to WORD
   } 
   ReleaseMutex
}

DataQueueTx( Queue*, WORD )
{
   LockMutex
   {
      //manipulate your queue, inserting new WORD msg

      ReleaseSemaphore(Queue->sema);  //increment semaphore count
   }
   UnlockMutex
}

Однако, возможно, это не очень "легкий вес". Это также предполагает, что очереди не уничтожаются во время использования. Кроме того, я подозреваю, что в очереди «WORD» возможны некоторые оптимизации.

Если вы ищете «Код без блокировки», то я предлагаю провести день или два, читая эти статьи Саттера .

Удачи!

1 голос
/ 10 апреля 2009

Я не знаю ни одного такого примитива. Я реализовал атомарную очередь, используя семафоры POSIX .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...