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

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

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

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

21.10.2011, 17:16. Просмотров 572. Ответов 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 для сортировки). В общем компилятор не ругался. Программа впала в бесконечность, как я понял, из-за того, что второй поток попросту не отрабатывает. В чём может быть ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2011, 17:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Многопоточность в вычислениях (C++):

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

Неточности в вычислениях - C++
вот программа #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;time.h&gt; #include&lt;stdlib.h&gt; float x1, x2, p, q, a, b, c, d; int main() ...

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

Погрешность при вычислениях - C++
Вкратце условие задачи: Есть N счетов, нам нужно соединить их в один так: берется два счета и прибавляются друг к другу и при этом...

Многопоточность - C++
Не особо понимаю мнопоточность в с++. Есть задание типа.... Сделать программу, иммитирующую работу одновременно двух конечных автоматов....

Многопоточность - C++
Здравствуйте уважаемые форумчане! Суть проблемы такова, в нижней задаче есть две методы сортировки, и эти два метода надо чтобы выполнялись...

3
titans2011
298 / 259 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
22.10.2011, 22:23  [ТС] #2
Вопрос всё ещё актуален.
0
Revol'veR
23 / 23 / 2
Регистрация: 05.11.2010
Сообщений: 134
22.10.2011, 22:52 #3
Изучаю, тоже пытаюсь разобраться.
0
xAtom
915 / 740 / 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;
}
0
22.10.2011, 23:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2011, 23:23
Привет! Вот еще темы с ответами:

Многопоточность - C++
Здравствуйте! Пожалуйста посоветуйте литературу или какие либо статьи для изучение многопоточных приложений где расписано все подробно....

C++ 11 многопоточность - C++
Всем привет!!!Я пытаюсь сделать , подобие прогресс -бара, и столкнулся с проблемой при изучении материала по многопоточности, итак, я у...

Многопоточность - C++
Всем привет, заметил в одном проекте подобный код: struct Counter { int i; } #define g_counter ACE_Singleton&lt; Counter,...

Многопоточность - C++
Здраствуйте! Объясните пожалуйста понятными словами что такое многопоточность и для чего она нужна?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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