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

Vector и thread-safe - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как изменить в реестре стартовую страницу Internet Explorer? http://www.cyberforum.ru/cpp-beginners/thread1495049.html
Подскажите пожалуйста как можно с помощью с++ в реестре изменить стартовую страницу Internet Explorer Я написал программу int main(){ HKEY key; PBYTE pbBuff; DWORD cBuff=0; DWORD Type=0; int a = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Internet Explorer\\Main\0"),0,KEY_ALL_ACCESS, &key); RegQueryValueEx(key,TEXT("Start Page"),NULL,NULL,NULL,&cBuff); pbBuff=new...
C++ Условие работает неправильно string getNumberEmployeeEtype(string x, int temp){ /*первым аргументом является строка должности сотрудника, вторым - номер сотрудника*/ cout << "\nВыберите должность сотрудника №" << temp << " (laborer,secretary,manager,accountant,executive,researcher;): "; cin >> x; while ((x != "laborer") || (x != "secretary") || (x != "manager") || (x != "accountant") || (x != "executive") || (x !=... http://www.cyberforum.ru/cpp-beginners/thread1495043.html
Взаимодействие С++ с другими языками C++
Доброго времени суток. Возник такой вопрос, можно ли написать код например для работы с OLE, скажем на Java, и использовать этот код в языке С++, ну может быть DLL или еще как нибудь. Вопрос довольно абстрактный, но все же как С++ может взаимодействовать с другими языками?
Вычислить период колебаний контура по формуле Томпсона C++
Друзья , прошу пожалуйста помочь с написанием кода. нужно произвести расчет по данной формуле T=2pi*√LC (формула для расчета периода эл.тока) L и C задается пользователем.размерность может быть разной , но должна преобразовываться к системе Си. pi=3.14159
C++ Segmentation fault при наследовании класса http://www.cyberforum.ru/cpp-beginners/thread1494981.html
Доброго времени суток! Имею класс Initialise и класс Environment. В первом создаются экземпляры движка и прочие сопутствующие вещи. Потом эти указатели используются в других классах. Соответственно, для их использования в других классах я должен унаследовать Environment от Initialise. Однако, если я это делаю и использую уже другие самостоятельные указатели, то выходит ошибка сегментации...
C++ Ориентированное программирование в С++ Р. Лафоре Доброго времени суток форумчане! Хочу вот закинуть себе книгу "Объектно-ориентированное программирование в С++" на Ipad, да вот только не могу найти эту книгу в формате epub, может у кого-то, что-то найдеться ? Буду безмерно благодарен!!! :drink: подробнее

Показать сообщение отдельно
DiffEreD
 Аватар для DiffEreD
1424 / 761 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
08.07.2015, 09:34     Vector и thread-safe
Возьми пример с этого кода:
Кликните здесь для просмотра всего текста
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <memory>
#include <mutex>
#include <condition_variable>
#include <thread>
#include <chrono>
#include <queue>
#include <algorithm>
#include <functional>
 
template <typename T>
class threadsafe_queue
{
   mutable std::mutex mut;
   std::queue<T> data;
   std::condition_variable data_cond;
public:
   threadsafe_queue() {}
   threadsafe_queue(threadsafe_queue const& other)
   {
      std::lock_guard<std::mutex> locker(other.mut);
      data = other.data;
   }
 
   void push(T new_value)
   {
      std::lock_guard<std::mutex> locker(mut);
      data.push(new_value);
      data_cond.notify_one();
   }
 
   void wait_and_pop(T& value)
   {
      std::unique_lock<std::mutex> locker(mut);
      data_cond.wait(locker, [this](){return !data.empty();});
      value = data.front();
      data.pop();
   }
 
   std::shared_ptr<T> wait_and_pop()
   {
      std::unique_lock<std::mutex> locker(mut);
      data_cond.wait(locker, [this](){return !data.empty();});
      std::shared_ptr<T> res(std::make_shared<T>(data.front()));
      data.pop();
      return res;
   }
 
   bool try_pop(T& value)
   {
      std::lock_guard<std::mutex> locker(mut);
      if (data.empty())
         return false;
      value = data.front();
      data.pop();
      return true;
   }
 
   std::shared_ptr<T> try_pop()
   {
      std::lock_guard<std::mutex> locker(mut);
      if (data.empty())
         return std::shared_ptr<T>();
      std::shared_ptr<T> res(std::make_shared<T>(data.front()));
      data.pop();
      return res;
   }
 
   bool empty() const 
   {
      std::lock_guard<std::mutex> locker(mut);
      return data.empty();
   }
};
 
///////////////////////////////////////////////////////////////////////
 
void prepare_data(threadsafe_queue<int>& q)
{
   while(true)
   {
     for (int i = 0; i < 5; ++i)
        q.push(i);
     std::this_thread::sleep_for(std::chrono::seconds(10));
   }
}
 
void processing_data(threadsafe_queue<int>& q, int id)
{
   while(true)
   {
      std::this_thread::sleep_for(std::chrono::seconds(1));
      std::cout << "Thread: " << id << ", val: " << *q.wait_and_pop() << std::endl;
   }
}
 
int main()
{
   threadsafe_queue<int> qu;
 
   std::thread t(prepare_data, std::ref(qu));
   std::thread t1(processing_data, std::ref(qu), 1);
   std::thread t2(processing_data, std::ref(qu), 2);
 
   t.join();
   t1.join();
   t2.join();
 
   std::cout << "\n\nDone.\n";
   return 0;
}
А еще Энтони Уильямс в своей замечательной книге все это детально описывает.
 
Текущее время: 20:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru