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

Буферы и синхронизация потоков - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как расширить консольное окно http://www.cyberforum.ru/cpp-beginners/thread1208524.html
Как расширить консольное окно, скажем на весь экран его растянуть
C++ C++ Описать структуру с именем DETAL, которая содержит следующие поля: Описать структуру с именем DETAL, которая содержит следующие поля: - Name - название детали; - Sort - сорт изделия; - Date-дата изготовления (структура: day; month, year - день, месяц, год); - Quant - количество; - Cost - цена детали. 2. Написать программу, использующую данную структуру и выполняет следующие действия: - Вводит с клавиатуры массив данных ZAKAZ, состоящий из N... http://www.cyberforum.ru/cpp-beginners/thread1208519.html
C++ Ошибка в коде С++ (сортировка)
как сделать так, чтоб выводило нормальный массив?
C++ Зашифровать файл, используя исключающее или
Здравствуйте. Задача: Есть файл, в котором записаны какие-то символы. Надо поочередно брать каждый символ и менять в нем 1 на 0 и 0 на 1 с помощью XOR. Например, символ 'a' это 01100001. После выполнения программы должно быть: 10011110 Еще обязательное условие. Можно использовать только один указатель на файл! Работаем с одним указателем на файл и используем функцию fseek. Вот что я...
C++ Структуры в языке C++ и не только http://www.cyberforum.ru/cpp-beginners/thread1208487.html
Вообщем, предыстория такая: для зачета нужно сдать 14 лабораторных, 11 из которых уже выполнено. Все бы ничего, но есть такие, которые в упор не осознаю в полной мере. В данном случае структуры и работа с файлами. Ну хоть убей, не понимаю. Вот решил спросить, как делать. Я здесь новенький, сильно камнями не забрасывайте) Это задача по структуре: Известны данные о массе и объеме n тел,...
C++ В одномерном массиве, состоящий из n действительных элементов, вычислить: В одномерном массиве, состоящий из n действительных элементов, вычислить: 1) количество элементов массива, лежащих в диапазоне от A до B; 2) сумму элементов массива, расположенных после максимального элемента. Упорядочить элементы массива по убыванию модулей элементов. Буду благодарен за помощь. подробнее

Показать сообщение отдельно
Praktolock
65 / 65 / 1
Регистрация: 29.11.2011
Сообщений: 300
16.06.2014, 02:33  [ТС]     Буферы и синхронизация потоков
Ну короче вот так:

buffer.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
 
struct STBUFFER
{
 
 std::vector<char>data;
 volatile int rbusy;
 volatile int wbusy;
 volatile int turn;
 STBUFFER();
 void gonnawrite();
 void gonnaread ();
 void finishedwrite();
 void finishedread ();
 
 int read (char*, int);
 int write(char*, int);
};
buffer.cpp
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
57
58
59
60
61
62
63
64
#include "buffer.h"
 
STBUFFER::STBUFFER()
{
 rbusy=0;
 wbusy=0;
 turn =0;
};
 
void STBUFFER::gonnawrite()
{
 wbusy=1;
 while(rbusy)
 {
  if(!turn)
  {
   wbusy=0;
   while(!turn){/*sleep*/};
   wbusy=1;
  }
 }
};
 
void STBUFFER::finishedwrite()
{
 wbusy=0;
 turn=0;
};
 
void STBUFFER::gonnaread()
{
 rbusy=1;
 while(wbusy)
 {
  if(turn)
  {
   rbusy=0;
   while(turn){/*sleep*/};
   rbusy=1;
  }
 }
};
 
void STBUFFER::finishedread()
{
 rbusy=0;
 turn=1;
};
 
int STBUFFER::read(char*_buf, int _sz)
{
 gonnaread();
 //читаем
 finishedread();
 return(0);
};
 
int STBUFFER::write(char*_buf, int _sz)
{
 gonnawrite();
 //пишем
 finishedwrite();
 return(0);
};
Не смог придумать адекватного названия переменной turn.
 
Текущее время: 00:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru