Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Интересные и занимательные задачи по программированию > Процессы и семафоры


Автор: toshun 18.12.2007, 14:21
Задача такая: Запустить в случайном порядке 10 процессов, каждый из которых выводит цифру от 0 до 9. С помощью средств синхронизации добиться, чтобы все цифры были выведены в одной строке в порядке возрастания.

#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/mman.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
int rand(void);
int control(int M[10], int a);
void init(int M[10]);
pid_t fork (void);
int segment(key_t, int nsems, int flags);

main(int argc, char *argv[])
{
    int fd;
    int k=fork(),i=0,a=0;
    caddr_t addr_1;
    fd=open("file",O_RDWR);
    addr_1=mmap((caddr_t)0, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    for(i=0;i!=10;i++)
    {    
        if(k==0)
        {
            a=rand()%10;
        }
    }
}

А вот как с помощью семафоров можно вывести на экран числа в порядке возрастания непонятно(под средством синфронизации я понял семафор, если нет, поправьте пожалуйста)

Автор: PPS05 21.12.2007, 17:03
Первое, что приходит в голову - перебирать все цифры от 0 до 9, пока соответствующий семафор не будет в сигнальном состоянии. Как нашли - выводим эту цифру и меняем состояние.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)