Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
shoonya
0 / 0 / 0
Регистрация: 05.04.2010
Сообщений: 3
05.04.2010, 13:20     Реализация 2х потоков, работа с буфером, механизм семафоров #1
Год не было С++, а теперь по смежному предмету задали вот такое :

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

Всё забыла, помогите пожалуйста... =(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2010, 13:20     Реализация 2х потоков, работа с буфером, механизм семафоров
Посмотрите здесь:

Работа с Массивами: реализация списка через массив? C++
C++ Терпеливая сортировка с обычным буфером
C++ Очередь с кольцевым буфером
C++ Работа с табличными базами данных. Реализация функции сортировки.
Реализация семафоров C++
C++ Создание и завершение процессов и потоков. Приоритеты выполнения потоков
C++ Зависание потоков. Работа с файлами
Взаимная блокировка приложений с использованием семафоров C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.04.2010, 14:04     Реализация 2х потоков, работа с буфером, механизм семафоров #2
помогу показывай что сделала?
подсказка: модель зовется "производитель-потребитель"
shoonya
0 / 0 / 0
Регистрация: 05.04.2010
Сообщений: 3
05.04.2010, 14:22  [ТС]     Реализация 2х потоков, работа с буфером, механизм семафоров #3
К сожалению программирование для меня непрофильный предмет, дается очень мало часов => очень тяжело разобраться. Только приступаю к решению данной задачи.
В универе мы писали две проги: Первая программа (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 считывание и вывод на экран, я правильно поняла?
Yandex
Объявления
05.04.2010, 14:22     Реализация 2х потоков, работа с буфером, механизм семафоров
Ответ Создать тему
Опции темы

Текущее время: 14:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru