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

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

Восстановить пароль Регистрация
 
titans2011
294 / 255 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
21.10.2011, 17:16     Многопоточность в вычислениях #1
Привет всем. Написал такой код.
Код
#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++ Многопоточность
C++ Будут ли мои многопоточные решения кроссплатформенными?
Многопоточность C++
Многопоточность C++
C++ Многопоточность
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
titans2011
294 / 255 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
22.10.2011, 22:23  [ТС]     Многопоточность в вычислениях #2
Вопрос всё ещё актуален.
Revol'veR
 Аватар для Revol'veR
23 / 23 / 2
Регистрация: 05.11.2010
Сообщений: 134
22.10.2011, 22:52     Многопоточность в вычислениях #3
Изучаю, тоже пытаюсь разобраться.
xAtom
 Аватар для xAtom
910 / 735 / 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     Многопоточность в вычислениях
Ответ Создать тему
Опции темы

Текущее время: 10:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru