не выходит реализовать интерфейс семафоров Дейкстры.
надо использовать очереди сообщений POSIX.
подскажите
небольшая програма затруднение (семафоры на основе очереди сообщений POSIX.)
Модератор: Модераторы разделов
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: небольшая програма затруднение
i Уведомление от модератора
Темы от студентов с запросами готовых решений по заданиям зарываются не глядя.
Ждём попыток решения от топикстартера.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
psuduck
- Сообщения: 2
Re: небольшая програма затруднение
получается только семафоры без очереди ожидания.как поменять?
Код: Выделить всё
В каталоге проекта создание make-file:
C_PIECES=init
C_FILES=$(C_PIECES:%=%.c)
C_O_FILES=$(C_PIECES:%=${ARCH}/%.o)
H_FILES=system.h
SRCS=$(C_FILES) $(H_FILES) $(S_FILES)
OBJS=$(C_O_FILES) $(S_O_FILES)
PGMS=${ARCH}/hello.exe
MANAGERS=io semaphore
include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
include $(RTEMS_CUSTOM)
include $(RTEMS_ROOT)/make/leaf.cfg
all: ${ARCH} $(SRCS) $(PGMS)
${ARCH}/hello.exe: ${OBJS} ${LINK_FILES}
$(make-exe)
Описание путей:
export PATH=/opt/rtems-4.8/bin:$PATH
export RTEMS_MAKEFILE_PATH=/opt/rtems-4.8/arm-rtems4.8/edb7312
Файл inet.c:
#include "system.h"
#include <stdio.h>
#include <stdlib.h>
int s=1;
int p(int *s)
{
while (*s == 0)
rtems_task_wake_after(100);
*s = *s-1;
return *s;
}
int v(int *s)
{
*s = *s+1;
return *s;
}
rtems_task Init(
rtems_task_argument ignored
)
{
printf( "\n\n*** HELLO WORLD TEST ***\n" );
printf( "Hello World\n" );
printf( "*** END OF HELLO WORLD TEST ***\n" );
exit( 0 );
}
Файл semaphore.c:
#include "system.h"
#include <stdio.h>
#include <stdlib.h>
int s=1;
int p(int *s)
{
while (*s == 0)
rtems_task_wake_after(100);
*s = *s-1;
return *s;
}
rtems_task Init(
rtems_task_argument ignored
)
{
printf( "\n\n*** 1233 ***\n" );
printf( "Hello World\n" );
printf( "*** 1233 ***\n" );
exit( 0 );
}
int v(int *s)
{
*s = *s+1;
return *s;
}