небольшая програма затруднение (семафоры на основе очереди сообщений POSIX.)

Модератор: Модераторы разделов

psuduck
Сообщения: 2

небольшая програма затруднение

Сообщение psuduck »

не выходит реализовать интерфейс семафоров Дейкстры.
надо использовать очереди сообщений POSIX.
подскажите
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: небольшая програма затруднение

Сообщение Portnov »

iУведомление от модератора

Темы от студентов с запросами готовых решений по заданиям зарываются не глядя.

Ждём попыток решения от топикстартера.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
psuduck
Сообщения: 2

Re: небольшая програма затруднение

Сообщение psuduck »

получается только семафоры без очереди ожидания.как поменять?

Код: Выделить всё

В каталоге проекта создание 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;

}
Спасибо сказали: