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

Нужно ли синхронизировать доступ к переменной из двух потоков? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Память класса http://www.cyberforum.ru/cpp-beginners/thread575724.html
у меня есть кусок программы, скажите пожалуйста могу ли я присвоить переменной state_ другое значение и почему комментарий про объединение памяти классов?? void perform_operation() { //...
C++ Помощь с блок схемой Здравствуйте. Не знаю, как отобразить в блок-схеме данную строчку return n ? gcd(n, m % n) : m; буду благодарен за разъяснение http://www.cyberforum.ru/cpp-beginners/thread575714.html
Помогите решить,элементарные задачи. C++
Приветствую кодеров,и хотел бы попросить помощи,в решении несложных задач.Которые мне к сожалению не дадуться.Потому что совсем не разбираюсь в С++.Если получиться,кто будет решать задачи,сможете...
Нужно узнать количество ядер в системе C++
Пока получается что-то типо такого... PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer; PDWORD length; GetLogicalProcessorInformation(Buffer, length); cout<<Buffer->ProcessorMask; но пишет, что...
C++ Одномерный массив http://www.cyberforum.ru/cpp-beginners/thread575705.html
(помогите пожалуйста решить задачу) в одномерном массиве состоящим из вещественных элементов, вычислить 1)модуль максимального по модулю элемента массива 2)сумму элементов массива, расположенного...
C++ Ошибка "E2238 Multiple declaration" привет ребят) плохо разбираюсь в программировании) подскажите плиз) вопрос следующий. я работаю с односвязным ацикличиским списком struct LIST { int val; LIST *next; }; подробнее

Показать сообщение отдельно
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.05.2012, 13:07
Avazart, Сам подумай, что будет, если этот код начнет работать без синхронизации.

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
#include <iostream>
#include <boost/thread.hpp>
#include <vector>
#include <iterator>
#include <random>
 
bool number_in_process = false;
bool ended = false;
std::vector<int> numbers;
boost::mutex mutex;
boost::condition_variable cond;
const int max_size = 20;
 
void add_number(std::mt19937& gen, std::uniform_int_distribution<>& distr)
{
   while (!ended)
   {
      if (!number_in_process)
      {
         int value = distr(gen);
         numbers.push_back(value);
         number_in_process = true;
         std::cout << "Value: " << value << " in process: " << number_in_process << std::endl;
         cond.notify_all();
      }
   }
}
 
void print()
{
   boost::unique_lock<boost::mutex> lock(mutex);
   while (1)
   {
      if (number_in_process)
      {
         std::cout << "Numbers size: " << numbers.size() << " numbers: ";
         std::copy(numbers.begin(), numbers.end(), std::ostream_iterator<int>(std::cout, " "));
         std::cout << std::endl;
         number_in_process = false;
         if (numbers.size() == max_size)
         {
            ended = true;
            break;
         }
      }
      cond.wait(lock);
   }
}
 
int main()
{
   std::mt19937 gen(time(0));
   std::uniform_int_distribution<> distr(0, 25);
   boost::thread add_thread(add_number, gen, distr);
   boost::thread print_thread(print);
   add_thread.join();
   print_thread.join();
   std::cout << "Size: " << numbers.size() << std::endl;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru