Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2013, 13:08   #1
heret1c
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 11
Восклицание Обмен числами используя семафоры С под Linux

Помогите реализовать такую задачу:
Процессы строят числа Фибоначчи, поочередно вычисляя очередное
число, выводя его на экран є передавая его другому процессу, чтобы тот вычислил следующее.
Внимание: никаких средств взаимодействия (файлов, pipe, ...), кроме семафоров и мьютексов,
не использовать!
Я набрасал вот такой код:
Код:
#include <unistd.h>
#include <semaphore.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <stdio.h>
 
int Fib(int k)
{
    if (k == 0) return 0;
    if (k == 1) return 1;
    return Fib(k-1) + Fib(k-2); 
}
 
int main()
{
    int mas[25], i;
    for (i = 0; i < 24; i++)
        mas[i] = Fib(i);
    
    char sem_name1[] = "mysemaphore1";
    char sem_name2[] = "mysemaphore2";
        int k1, k2;
        sem_t *s_temp = sem_open(sem_name1, O_CREAT, 0777, mas[0]);
    sem_t *s2 = sem_open(sem_name2, O_CREAT, 0777, 1);
    sem_getvalue(s2, &k2);
        sem_getvalue(s_temp, &k1);
    sem_unlink(sem_name1);
    printf("%i\n", k1);
 
    while (k2 != 0){
        for (i = 0; i < 24; i++){
            if (mas[i] == k)
                break;      
        }
        sem_t *s1 = sem_open(sem_name1, O_CREAT, 0777, mas[i + 1]);
        sem_getvalue(s1, &k1);
        printf("%i\n", k1);
        }
    exit (0);
}
А вот что делать дальше не знаю.
heret1c вне форума Ответить с цитированием
Старый 31.05.2013, 16:41   #2
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Наверное это не суть важно, но вычисление следующего числа Фибоначчи будет происходит все медленнее и медленнее. Не проще ли сразу плюсовать в цикле два числа, тапа:
int fib[25];
fib[0] = 0;
fib[1] = 1;
for (int i=2; i< 25; i++) {
fib[i] = fib[i-1] + fib[i-2];
}

вот. А если по сути вопроса, то я че то не вижу создание других потоков в вашей программе, а простое использование симафоров, которые без потоков не к месту. Может я че не заметил извиняйте.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обмен сигналами между процессами. Linux. Язык C. Npwas Помощь студентам 0 18.04.2013 23:23
Обмен данными между процессами. Но вопрос по семафоры :) RAZOR1703 Win Api 8 28.11.2011 21:37
Обмен данными используя LPT порт Arustokrat812 Помощь студентам 5 03.05.2011 14:07
c++ в Linux (Межпроцессорный обмен в Linux) RusLotus Помощь студентам 0 13.10.2009 16:59
обмен сообщениями между клиентом и сервером используя ClientSocket и ServerSocket xTANATOSx Работа с сетью в Delphi 3 04.10.2007 15:17