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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
titans2011
295 / 256 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
#1

Многопоточность в вычислениях - C++

21.10.2011, 17:16. Просмотров 555. Ответов 3
Метки нет (Все метки)

Привет всем. Написал такой код.
Код
#include <iostream>
#include <algorithm>
#include <process.h>
#include <stdio.h>
using namespace std;

const int N=10;//задаётся число величины массива
int arr[N];
int nn=0;  //Перебираемые числа для первого потока
int nn1=0; //Перебираемые числа длявторого потока
int f1=0, f2=0;  //Флаг передачи числа (если оба равны нулю, то вызывается вычисление, если нет, то ждём, пока потоки обнулят флаги)
///////////////////////////

void Thread( void* pParams )
  { 
	int h=N/2; //Счётчик индекса в массиве
	
    int k=0;   //Флаг простого числа
	while (h<N)
	{
		cout<<"In cycle2 h="<<h<<"\n";
		if (f2==1){
		for ( int j=2; j<=nn/2; j++)
		{
			if (nn%j==0)
			{
				k++;

			}
		}

		if (k==0)
		{
			arr[h]=nn;
			h++;
			f2=0; //заполнил элемент, можно продолжать
		}
		k=0;
		
		}//запирается флагом
	 
	}
  }

//////////////////////////
int main(){
	
	
	for (int j=0; j<N; j++)
	{
		arr[j]=0;

	}
    
	/////////////////////////////
	int h=0; //Счётчик индекса в массиве
	//int nn=0;  //Перебираемые числа
    int k=0;   //Флаг простого числа
	while (h<N/2)
       
	{
		cout<<"In cycle1 h="<<h<<"\n";
		if (f1==1){
		for ( int j=2; j<=nn/2; j++)
		{
			if (nn%j==0)
			{
				k++;

			}
		}

		if (k==0)
		{
			arr[h]=nn;
			h++;
			f1=0;

		}
		k=0;
		}
		
		if (f1==0 && f2==0)
		{
			nn+=2;
			nn1=nn-1;
			f1=1; f2=1;
		_beginthread( Thread, 0, NULL );
		}


	}
	
	////////////////////////////
	int y=0;
	for (int j=0; j<N; j++)
	{
		cout<<arr[j]<<"\t ";
		if (y<9){
			y++;
		} else{
			cout<<endl;
			y=0;
		}

	}

	return 0;
}
Смысл таков. Просто попробовать многопоточность. Создаётся глобальный массив. Он делится пополам. Первая часть один поток заполняет, другая часть второй. Задача простая, заполнить его простыми числами (Я знаю, что он не будет отсортирован, позже хотел применить STL для сортировки). В общем компилятор не ругался. Программа впала в бесконечность, как я понял, из-за того, что второй поток попросту не отрабатывает. В чём может быть ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2011, 17:16     Многопоточность в вычислениях
Посмотрите здесь:

Погрешность в вычислениях - C++
Есть зщадание вычислить значения для {y}_{n}=\frac{1}{n}-5{y}_{n-1} если n=0,1,2,3,...,16. зная что {y}_{n}\approx 0.182321556 Я написал...

Ошибка в вычислениях синуса - C++
дана формула z=(2^(-x))*sqrt{x+\sqrt{abs(y)}}*\sqrt{exp^((x-1)/sin(x))}, по ней надо вычислить. Но вот ошибка возникает в синусе, не могу...

Многопоточность - C++
podskazite paru premerov mnogopoto4jnasti, ili gde eto najti.

Многопоточность c++ - C++
Добрый день! Я только начинаю изучать многозадачность в c++ и у меня возник вопрос о том как возможно использовать один объект разными...

Многопоточность С++ - C++
Добрый вечер! написал вот такую программку. std::vector&lt;std::thread&gt; threads; std::recursive_mutex mutex; for (int i...

Многопоточность в Windows - C++
Добрый день. Помогите разобраться, в чем проблема. Уже 2 дня ломаю голову и ничего не получается. При компиляции выдается такая вот...

многопоточность приложения - C++
есть код #include &lt;windows.h&gt; #include &lt;locale.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() ...

многопоточность в WinForms - C++
суть проблемы : есть форма с двумя кнопками. по нажатии одной из кнопок должен вызываться метод(или функция из другого файла, не...

Тетрис и многопоточность - C++
Здравствуйте. Взялся я за тетрис, немного написал, а потом понял, что мне нужны два потока. Вот зачем: у меня игровое поле — двумерный...

WaitForSingleObject и многопоточность - C++
Добрый день! Мучаюсь с такой задачкой. Имеется C++ DLL, которую до меня писал другой программист. Одна из ее функций хватает(считывает,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
titans2011
295 / 256 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
22.10.2011, 22:23  [ТС]     Многопоточность в вычислениях #2
Вопрос всё ещё актуален.
Revol'veR
23 / 23 / 2
Регистрация: 05.11.2010
Сообщений: 134
22.10.2011, 22:52     Многопоточность в вычислениях #3
Изучаю, тоже пытаюсь разобраться.
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.10.2011, 23:23     Многопоточность в вычислениях #4
Цитата Сообщение от titans2011 Посмотреть сообщение
Смысл таков. Просто попробовать многопоточность. Создаётся глобальный массив. Он делится пополам. Первая часть один поток заполняет, другая часть второй.
titans2011, зачем так "мудрить" код для простого заполнения.
Вот привёл простой пример, заполняем и всё.
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
#include <iostream>
#include <process.h>
using namespace std;
const int N = 10;
int  arr[N];
 
void func_thread(void* param) {
   for(int c = *(int*)param; c < N; arr[c++] = c);
   _endthread();
}
 
int main(){
  int center = N / 2;
  _beginthread(func_thread, 0u, (void*)&center);
 
  for(int i = 0; i < center; arr[i++] = i);
 
  _sleep(100);
  for(int p = 0; p < N; p++)
       cout << arr[p] << " ";
  cout.put('\n');
  cin.get();
  return 0;
}
Yandex
Объявления
22.10.2011, 23:23     Многопоточность в вычислениях
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru