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

Синхронизация потоков - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Структуры в c++. Исправление кода http://www.cyberforum.ru/cpp-beginners/thread127375.html
Требуется описать структуру с именем PRICE, содержащую следующие поля: -название товара; -название магазина, в котором продается товар; -стоимость товара. Написать программу,выполняющую следующие действия: -ввод с клавиатуры данных в массив, состоящий из восьми элементов типа PRICE; записи должны быть рамещены в алфавитном порядке по названиям товаров; -вывод на экран информации о товаре,...
C++ Передать массив в функцию Здрасти. Знаю что таких тем навалом,но я что-то не понял. допустим есть массив mas я передаю его в функцию func(...). в этой функции к каждому элементу массива прибавляется 1. я не понимаю как передать массив в функцию и в этой функции обращаться к элементам массива. http://www.cyberforum.ru/cpp-beginners/thread127373.html
C++ Составить программу,которая вычисляет сумму элементов массива, которые расположены между максимальным и минимальным элементами.
Составить программу,которая вычисляет сумму элементов неупорядоченного целочисленного массива М, который состоит из 12 чисел, которые не повторяются, расположенных между ёё максимальным и минимальным элементами.
C++ В текстовом массиве, посчитать сумму длин элементов, стоящих на четных местах
В текстовом масиве, пощитать суму длин елементов што стоят на парных местах
C++ Создать переменную с параметрами http://www.cyberforum.ru/cpp-beginners/thread127357.html
Незнаю как назвать это)) Как создать такую переменную, чтобы вот допустим: есть переменная var, а ей надо присвоить параметры какие то, тоесть чтобы можно было сделать так: var->param1 = 9; var->param2 = 3; var->param3 = 2; var->param4 = "ololo"; var->param5 = "fdfjwkfen";
C++ Консольный Сапер Пишу консольного сапера, не могу организовать вывод на консоль поля, мин и движение по полю, точнее что то я организовал, но что именно трудно сказать, по тому что, то что я сделал работать особо не хочет. Подскажите что я не так делаю или вариант вывода на консоль подскажите другой. Если вкратце то программа генерирует два числа(координаты х у), и по этим координатам вписывает 0 т.е бомба... подробнее

Показать сообщение отдельно
RAIDER_55
24 / 24 / 5
Регистрация: 04.04.2010
Сообщений: 229
10.05.2010, 09:43     Синхронизация потоков
Разработать многопоточную программу, отображающую на экране взаимодействие трех нитей "читателей" из общей области данных и трех "писателей", записывающих в этот буфер данные. Буфер предназначен для хранения 12 символов. Первая нить-писатель выводит в буфер данные в латинском алфавите прописными буквами, вторая нить-писатель выводит в буфер данные в латинском алфавите строчными буквами, третья нить-писатель выводит в буфер данные в русском алфавите. Такой вывод эти три нити осуществляют в два приема, первый из которых записывает половину своего текста без завершающего этот промежуточный текст нуля. Между такими половинами вывода нити производят задержку на случайную величину миллисекунд, но не более 2 с. После вывода своего текста в буфер каждая нить-писатель переходит в ожидание порядка 2–3 с до следующей попытки записи в буфер. Нити-читатели через случайный интервал порядка 300 мс читают данные из буфера, если это позволяют средства синхронизации доступа между нитями, и выводят прочитанный текст на экран, каждая в свой столбец. Каждый вывод нити-читателя осуществляется в новую строку своего столбца, поэтому суммарные действия вывода в таких нитях предусмотреть только для 20–24 строк. Синхронизацию осуществить с помощью семафоров.

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <windows.h>
#include <time.h>
 
HANDLE hsmread,hsmwrite,thread[6];
char buffer1[12],buffer2[12];
 
DWORD WINAPI Writer(void *k)
{
  int i,bukva,f;
  f=(int)k;
  while(1)
  {
 
    switch (f)
    {
      case 1: bukva=97; break;
      case 2: bukva=65; break;
      case 3: bukva=128; break;
    }
    
    WaitForSingleObject(hsmwrite,INFINITE);
    printf("\n");
    for (i=0; i<6; i++)
    {
      buffer1[i]=bukva+i;
    }
    Sleep(500);
    for (i=6; i<12; i++)
    {
      buffer1[i]=bukva+i;
    }
    ReleaseSemaphore(hsmwrite,1,NULL);
//    ReleaseSemaphore(hsmread,1,NULL);
  }
}
 
DWORD WINAPI Reader(void *u)
{
 
  int i=0,f=0,j=0,b;
  f=(int)u;
  switch (f)
  {
     case 4: b=20; break;
     case 5: b=40; break;
     case 6: b=60; break;
  }   
  WaitForSingleObject(hsmread,INFINITE);
  while (1)
  {
    
    j++;
    for (i=0; i<12; i++)
    {
      buffer2[i]=buffer1[i];  
    }
    for (i=0; i<12; i++)
    {
         gotoxy(b+i,j);
     //  printf("%d",f);
         printf("%c",buffer2[i]);
         Sleep(rand()%100);
    }
 
   }
ReleaseSemaphore(hsmread,1,NULL);
}
 
void main()
{
  unsigned long id;
  time_t h;
  int i;
  clrscr();
  hsmread=CreateSemaphore(NULL,0,1,NULL);
  hsmwrite=CreateSemaphore(NULL,1,1,NULL);
  srand((unsigned)time(&h));
  
  for (i=1; i<4; i++)
      thread[i]=CreateThread(NULL,4096,Writer,(void*)i,0,&id);
 
  for (i=4; i<7; i++)
     thread[i]=CreateThread(NULL,4096,Reader,(void*)i,0,&id);
 
  
  for (i=1; i<7; i++)
    CloseHandle(thread[i]);
  CloseHandle(hsmread);
  CloseHandle(hsmwrite);
  system("pause");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru