LINUX.ORG.RU

Проблема с очередью сообщений


0

0

Господа помогите плз!

Может кто сталкивался. Есть программка, вот ссылка на нее http://www.stargazer.dp.ua/download/tq.tgz

В программке два потока, один пишет в очередь сообщений, другой читает. Пишущий процесс работает в несколько раз быстрее читающего. Это приводит к тому, что через некоторое время очередь полностью заполняется. После этого пишущий процесс может добавлять в очередь новое сообщение после того, как читающий освободит место в очереди. Короче происходит синхронизация, и пишущий и чиатющий поток работают на одной скорости. Всё пучком.

Однако, на FreeBSD эта же программка работает совсем по другому, при заполнении очереди блокируется не просто пишущий поток, а весь процесс, т.е. и пишущий и читающий процессы. Грубо говоря программа зависает.

Кто знает в чем дело и возможно ли это побороть?

PS: Компилится прога Linux: make -f make.lin FreeBSD: make -f make.bsd

anonymous

Re: Проблема с очередью сообщений

А с какими очередями ты работаеш posix, systemV или вообще чтото третье.

Насколько я помню первые приципиально не предназначаются для синхронизации потоков. В Линуксе ето возможно так как потоки не сильно отличаются от процессов

cvv ★★★★★ ()

Re: Проблема с очередью сообщений

>#include <sys/ipc.h>

ipc - System V _interprocess_ communication mechanisms

cvv ★★★★★ ()
Ответ на: Re: Проблема с очередью сообщений от cvv

Re: Re: Проблема с очередью сообщений

Видимо systemV. msgget, msgsnd, msgrcv.

Тут ворос не в синхронизации, она как-бы побочный продукт. То же происходит если у нас есть fifo-файл, когда он забит, попытка записи в него приводит к блокировке процесса до освобождения места файле. Тоже и с очередью.

Меня интересует во фре блокировка наступает для одной нити или для всего процесса со всеми нитями?

anonymous ()
Ответ на: Re: Re: Проблема с очередью сообщений от anonymous

Re: Re: Re: Проблема с очередью сообщений

>Меня интересует во фре блокировка наступает для одной нити или для всего процесса со всеми нитями?

POSIX требует блокировки всех нитей в процессе

cvv ★★★★★ ()

Re: Re: Re: Re: Проблема с очередью сообщений

Как я понимаю, при использовании IPC от SystemV, стандарт POSIX требует блокирования всех нитей в процессе? Так? Где вообще про это можно почитать, а то сколько маны не перечитывал не нашел про это (может плохо читал?).

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.