Именованные семафоры Posix
Именованные семафоры Posix
В листинге А.26 приведен текст функции main, измеряющей быстродействие именованных семафоров Posix, а в листинге А.25 — соответствующая функция incr.
Листинг А.25. Увеличение общего счетчика с использованием именованного семафора Posix
//bench/incr_pxsem2.c
40 void *
41 incr(void *arg)
42 {
43 int i;
44 for (i = 0; i < nloop; i++) {
45 Sem_wait(shared.mutex);
46 shared.counter++;
47 Sem_post(shared.mutex);
48 }
49 return(NULL);
50 }
Листинг А.26. Функция main для измерения быстродействия именованных семафоров Posix
//bench/incr_pxsem2.с
1 #include "unpipc.h"
2 #define MAXNTHREADS 100
3 #define NAME "incr_pxsem2"
4 int nloop;
5 struct {
6 sem_t *mutex; /* указатель на именованный семафор */
7 long counter;
8 } shared;
9 void *incr(void *);
10 int
11 main(int argc, char **argv)
12 {
13 int i, nthreads;
14 pthread_t tid[MAXNTHREADS];
15 if (argc != 3)
16 err_quit("usage: incr_pxsem2 <#loops> <#threads>");
17 nloop = atoi(argv[1]);
18 nthreads = min(atoi(argv[2]), MAXNTHREADS);
19 /* инициализация именованного семафора 0 */
20 sem_unlink(Px_ipc_name(NAME)); /* ошибка – OK */
21 shared.mutex = Sem_open(Px_ipc_name(NAME), O_CREAT | O_EXCL, FILE_MODE, 0);
22 /* создание всех потоков */
23 Set_concurrency(nthreads);
24 for (i = 0; i < nthreads; i++) {
25 Pthread_create(&tid[i], NULL, incr, NULL);
26 }
27 /* запуск таймера и разблокирование семафора */
28 Start_time();
29 Sem_post(shared.mutex);
30 /* ожидание завершения всех потоков */
31 for (i = 0; i < nthreads; i++) {
32 Pthread_join(tid[i], NULL);
33 }
34 printf("microseconds: %.0f usec ", Stop_time());
35 if (shared.counter != nloop * nthreads)
36 printf("error: counter = %ld ", shared.counter);
37 Sem_unlink(Px_ipc_name(NAME));
38 exit(0);
39 }
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Семафоры
Семафоры Объекты второго из трех упомянутых в начале главы типов объектов синхронизации ядра — семафоры (semaphores), поддерживают счетчики, и когда значение этого счетчика больше 0, объект семафора находится в сигнальном состоянии. Если же значение счетчика становится
Именованные каналы
Именованные каналы Именованные каналы (named pipes) предлагают ряд возможностей, которые делают их полезными в качестве универсального механизма реализации приложений на основе IPC, включая приложения, требующие сетевого доступа к файлам, и клиент-серверные системы[31], хотя
Семафоры
Семафоры Для синхронизации процессов, а точнее, для синхронизации доступа нескольких процессов к разделяемым ресурсам, используются семафоры. Являясь одной из форм IPC, семафоры не предназначены для обмена большими объемами данных, как в случае FIFO или очередей сообщений.
12.3 СЕМАФОРЫ
12.3 СЕМАФОРЫ Поддержка системы UNIX в многопроцессорной конфигурации может включать в себя разбиение ядра системы на критические участки, параллельное выполнение которых на нескольких процессорах не допускается. Такие системы предназначались для работы на машинах AT amp;T
4.4.2. Именованные каналы (pipes)
4.4.2. Именованные каналы (pipes) Еще один тип специальных файлов - именованные каналы, или буферы FIFO (First In - First Out). Файлы этого типа служат в основном для того, чтобы организовать обмен данными между разными приложениями (pipe переводится с английского как труба).Канал - это очень
4.6. Именованные каналы (FIFO)
4.6. Именованные каналы (FIFO) Программные каналы не имеют имен, и их главным недостатком является невозможность передачи информации между неродственными процессами. Два неродственных процесса не могут создать канал для связи между собой (если не передавать
Семафоры Posix, размещаемые в памяти
Семафоры Posix, размещаемые в памяти Мы измеряем скорость работы семафоров Posix (именованных и размещаемых в памяти). В листинге А.24 приведен текст функции main, а в листинге А.23 — текст функции incr.Листинг А.23. Увеличение счетчика с использованием семафоров Posix в
Именованные константы и макроопределения
Именованные константы и макроопределения Директива #define обычно используется для замены часто используемых в программе констант, ключевых слов, операторов и выражений осмысленными идентификаторами. Идентификаторы, которые заменяют числовые или текстовые константы
Именованные каналы
Именованные каналы Firebird поддерживает протокол Мiсrоsоft WNet Named Pipes для серверов Windows NT/2000, XP и клиентов Windows. Имя канала по умолчанию interbas. Windows 9х и ME не Moryт быть серверами WNet.! ! !ПРИМЕЧАНИЕ. Протокол Windows Named Pipes (именованные каналы) часто называют NetBEUI. Строго говоря, NetBEUI является
Именованные ограничения
Именованные ограничения При объявлении ограничения на уровне таблицы или на уровне столбца вы можете именовать ограничение, используя предложение CONSTRAINT. Если вы опустите предложение CONSTRAINT, Firebird сгенерирует уникальное системное имя ограничения. Ограничения хранятся в
Именованные виды
Именованные виды С целью последующего использования виды можно сохранять под уникальными именами. Допускается сохранение видового экрана целиком или только какой-либо его части. Виды пространства модели и пространства листа сохраняются отдельно. Если использовано
Именованные шаблоны
Именованные шаблоны Вместо того чтобы при помощи атрибута match указывать, какая часть входящего документа должна преобразовываться данным шаблоном, ему можно присвоить имя и вызывать в любой момент вне зависимости от контекста преобразования. Такие шаблоны очень схожи
Именованные наборы атрибутов
Именованные наборы атрибутов Элемент xsl:attribute-set Синтаксис элемента определяется следующей конструкцией:<xsl:attribute-set name="имя" use-attribute-sets="имена"> <!-- Содержимое: несколько элементов xsl:attribute --></xsl:attribute-set>Для того чтобы упростить создание в элементах целых наборов
Стивенс Уильям Ричард
Просмотр ограничен
Смотрите доступные для ознакомления главы 👉