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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Память класса http://www.cyberforum.ru/cpp-beginners/thread575724.html
у меня есть кусок программы, скажите пожалуйста могу ли я присвоить переменной state_ другое значение и почему комментарий про объединение памяти классов?? void perform_operation() { // calling some implementation methods. // Usually, this is achieved using PImpl idiom (except some moments), but here we have a directive do_work_1(); // calling method of base class, which...
C++ Помощь с блок схемой Здравствуйте. Не знаю, как отобразить в блок-схеме данную строчку return n ? gcd(n, m % n) : m; буду благодарен за разъяснение http://www.cyberforum.ru/cpp-beginners/thread575714.html
Помогите решить,элементарные задачи. C++
Приветствую кодеров,и хотел бы попросить помощи,в решении несложных задач.Которые мне к сожалению не дадуться.Потому что совсем не разбираюсь в С++.Если получиться,кто будет решать задачи,сможете сделать их самым обычным способом)Заранее благодарен. 1)Тело имеет форму параллелепипеда с высотой h. Прямоугольник в основе имеет диагональ d. Известно, что диагонали прямоугольника пересекаются под...
Нужно узнать количество ядер в системе 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; }; подробнее

Показать сообщение отдельно
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
18.05.2012, 17:43  [ТС]     Нужно ли синхронизировать доступ к переменной из двух потоков?
Производитель-Потребитель, производитель скажем генерирует числа и дописывает их в массив, а производитель увеличивает число элементов и производит реаллок памяти.
Не понял само предложение.

Добавлено через 1 час 33 минуты
Насчет vector я имел ввиду код типа
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
//---------------------------------------------------------------
vector<int> v;
//---------------------------------------------------------------
DWORD WINAPI ThreadFunc(LPVOID param)
{
 for(int i=0;i<1000;i++) v.push_back(i);
}
//---------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
DWORD lpThreadId;
HANDLE hT= CreateThread(NULL,0,ThreadFunc,NULL,0,&lpThreadId);
 
Sleep(100); // задержка на 100 мс
for(int i=0;i<v.size();i++)
  {
  Sleep(100);// задержка на 100 мс
  cout<< v[i]<<endl;
  }
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Добавлено через 9 минут
Про bool имел ввиду приблизительно такой код
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
using namespace std;
//---------------------------------------------------------------
bool b=false;
//---------------------------------------------------------------
DWORD WINAPI ThreadFunc(LPVOID param)
{
 // do something
 b=true;
}
//---------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
bool b=false;
DWORD lpThreadId1;
HANDLE hT1= CreateThread(NULL,0,ThreadFunc,NULL,0,&lpThreadId1);
 
// do something
 
if(b)// Если поток hT1 закончен запустить подобный поток ( допустим исх.данные изменились )
 {
 bool b=false;
 DWORD lpThreadId2;
 HANDLE hT2= CreateThread(NULL,0,ThreadFunc,NULL,0,&lpThreadId2);
 }
else
 {
  TerminateThread(hT1,NULL);//Если еще не закончин убиваем его
  bool b=false;
  DWORD lpThreadId2;  // Допустим запускаем поток с новыми исх данными
  HANDLE hT2= CreateThread(NULL,0,ThreadFunc,NULL,0,&lpThreadId2);
 }
system("pause");
return 0;
}
//---------------------------------------------------------------------------
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru