Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 05.04.2010
Сообщений: 3
1

Реализация 2х потоков, работа с буфером, механизм семафоров

05.04.2010, 13:20. Просмотров 2435. Ответов 2
Метки нет (Все метки)

Год не было С++, а теперь по смежному предмету задали вот такое :

Написать программу, содержащую два потока. Первый поток генерирует последовательность чисел и помещает их в буфер из Nbuf элементов (с проверкой на свободное место в буфере с использованием механизма семафоров). Второй считывает данные из буфера и выводит их на экран.
Количество элементов Nbuf = 5, вид последовательности – натуральные числа и длина буфера = 500.
Определить максимальную длину буфера при различных приоритетах потоков.

Всё забыла, помогите пожалуйста... =(
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2010, 13:20
Ответы с готовыми решениями:

Синхронизацией потоков посредством семафоров
Приветствую. Пишу многопоточное приложение с синхронизацией потоков посредством семафоров. Почему...

Синхронизация потоков с использованием семафоров
Помогите пожалуйста с материалам по потокам... ничего дельного найти не могу. необходимо бокировать...

Реализация семафоров
не могу правильно поставить семафоры, чтоб программа правильно отрабатывала.. помогите, я уже...

Реализация семафоров
Возможно ли реализовать семафоры вручную или же для этого нужна обязательная поддержка процессора?

2
Эксперт С++
3210 / 1459 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.04.2010, 14:04 2
помогу показывай что сделала?
подсказка: модель зовется "производитель-потребитель"
0
0 / 0 / 1
Регистрация: 05.04.2010
Сообщений: 3
05.04.2010, 14:22  [ТС] 3
Лучший ответ Сообщение было отмечено shoonya как решение

Решение

К сожалению программирование для меня непрофильный предмет, дается очень мало часов => очень тяжело разобраться. Только приступаю к решению данной задачи.
В универе мы писали две проги: Первая программа (MASTER) запускает вторую (SLAVE) и переходит в режим ожидания. Программа SLAVE читает идентификатор процесса (PID, Process Identifier) запустившей ее программы из командной строки и ожидает завершения работы программы MASTER.
Это и есть реализация Двух потоков?

Добавлено через 4 минуты
Вот листинг того, что у меня есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//Программа master
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
 
void main(int argc, char *argv[])
{
    char cmd[128];
    if (argc!=1)
        strcpy(cmd,argv[1]);
    else
        strcpy(cmd,"slave.exe");
    int pid=GetCurrentProcessId();
    sprintf(cmd+strlen(cmd)," %d",pid);
    cout<<"Master: Starting:" << cmd << "\n";
    cout.flush();
    STARTUPINFO info;
    memset(&info,0,sizeof(info));
    info.cb=sizeof(info);
    PROCESS_INFORMATION pinfo;
    if (!CreateProcess(NULL,cmd,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,
        NULL,NULL,&info,&pinfo))
    {
        cout<<"Master: Slave процесс не запущен\n";
        cout<<"Master: проверьте правильность указания имени процесса в коммандной строке";
    }
    cout<<"Master: Sleeping\n";
    cout.flush();
    Sleep(15000);
    cout<<"Master: Exiting\n";
    exit(0);
}
//Программа Slave
#include <windows.h>
#include <iostream.h>
#include <stdio.h> // temp
 
void main(int argc,char *argv[])
{
    if (argc!=2)
    {
        cerr<<"Slave: Необходимо сначала запустить MASTER.EXE.\n";
        exit(1);
    }
    int pid=atoi(argv[1]);
    HANDLE process=OpenProcess(PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE,pid);
    if (!process) cout<<"Slave:Ошибка открытия процесса\n";
    cout<<"Slave:Ожидание завершения процесса Master\n";
    cout.flush();
    if (WaitForSingleObject(process,INFINITE)==STATUS_WAIT_0)
        cout<<"Slave: Master завершил работу\n";
    else
        cout<<"Slave: Не известная ошибка\n";
    exit(0);
}

На основе MASTER мне нужно сделать генерацию чисел, а на основе SLAVE считывание и вывод на экран, я правильно поняла?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2010, 14:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с буфером...
Как на VC++ считывать содержание буфера (текст, а не файл)? Как отследить изменение его...

Работа с буфером
Привет! ищу в буфере текст при котором надо вывести сообщение,но проблема в том то что могут быть...

Работа с z-буфером
Как считать матрицу пикселей глубины каждой точки (вроде бы она хранится в буфере глубины)?

Работа с буфером
Добрый день, требуется исправить программу. Суть программы - имитирует ручной ввод информации из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.