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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
shoonya
0 / 0 / 0
Регистрация: 05.04.2010
Сообщений: 3
#1

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

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

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

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

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

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

Работа с буфером обмена - C++
В общем нужна программа, которая по клавише активации(например F10) считывала кол-во символов в буфере обмена и заменяла их другими...

Реализация ispunct при использовании потоков - C++
Дана программа-переводчик с англ. на русский. Проблема в том, что при вводе текста со знаками препинания или с регистром не считывается...

Зависание потоков. Работа с файлами - C++
Всем еще раз привет. Очень прошу помощи. Пишу на С++ под винду, с учетом специфики проекта выбор остановился на boost library. Пишу...

Параллельная работа двух потоков - C++
Добрый день ! Подскажите пожалуйста , как сделать так, что-бы один поток считывал строки, а другой считал буквы и слова ? ...

Синхронизацией потоков посредством семафоров - C++/CLI
Приветствую. Пишу многопоточное приложение с синхронизацией потоков посредством семафоров. Почему не объявляется HANDLE? Я не нуб,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.04.2010, 14:04 #2
помогу показывай что сделала?
подсказка: модель зовется "производитель-потребитель"
shoonya
0 / 0 / 0
Регистрация: 05.04.2010
Сообщений: 3
05.04.2010, 14:22  [ТС] #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 считывание и вывод на экран, я правильно поняла?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2010, 14:22
Привет! Вот еще темы с ответами:

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

Реализация семафоров - C++ Linux
не могу правильно поставить семафоры, чтоб программа правильно отрабатывала.. помогите, я уже незнаю.. #include &lt;stdio.h&gt; #include...

Разделение данных, механизм (Data Separation, Mechanism) – реализация - 1С
http://v8.1c.ru/overview/Term_000000788.htm Как реализуется обозначенный функционал? Т.е. общий принцип я понимаю, но разобраться как...

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


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

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

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