Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2010, 18:09   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию Использование mutex

Добрый вечер! Необходимо написать программу:
. Имеется n потоков, генерирующих случайные целые числа. Занести эти числа в хеш-таблицу, представляющую собой массив из 10 указателей на списки целых чисел. Для определения местоположения числа x в хеш-таблице использовать следующую хеш-функцию:

int hash(int x)
{
return x % 10;
}

Если поток собирается записать число x в k-ю строку таблицы, то он должен проверить, не пишет ли другой поток свое число в эту же строку.
Вот то что написала:
Код:
// project created on 28.05.2010 at 9:11
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <pthread.h>
using namespace std;

//==================================================================================
//				описание данных
//==================================================================================
	const int count=10;	//ЙНКХВЕЯРБН ВХЯЕК ЙНРНПШЕ АСДСР ЯЦЕМЕПХПНБЮМШ
	struct element		//ЩКЕЛЕМР ЯОХЯЙЮ
	{
		int inf;
		element *next;
	};
	element* mas[count];	//ЛЮЯЯХБ УПЮМЪЫХИ СЙЮГЮРЕКХ
	const int n=10;	//ЙНКХВЕЯРБН ОНРНЙНБ
	int col_num[n];


	static pthead_mutex_t foo_mutex;

//=================================================================================
//			функции
//=================================================================================

int hash (int x)	//БШВХЯКЕМХЕ ЯРНКАЖЮ
{
	return x%10;
}

void print()
{
	for(int i=0;i<n;i++)
	{
		element * head=mas[i];
		while(head!=NULL)
		{
			std::cout<<head->inf;
			head=head->next;
		}
		std::cout<<"\n";
	}
}

void * thread_func(void* data)
{
	int colnum=* (int *) data;

	int gen=(int)(rand()%90+colnum-5);
	int mesto = hash(gen);
	pthread_mutex_lock(&foo_mutex);
	element * head=mas[mesto];
	if (head!=NULL)
	{
	while(head->next!=NULL)
		head=head->next;
	element *new_el;
	new_el=new element;
	new_el->inf=gen;
	head->next=new_el;
	new_el->next=NULL;
	}
	else
	{
		
		head = new element;
		head->inf=gen;
		head->next=NULL;
		mas[mesto]=head;
	}
	pthread_mutex_unlock(&foo_mutex);
	return 0;
}

int main (int argc, char *argv[])
{
//================================================================================
//		инициализация данных
//================================================================================
	pthread_t Thread[n];	//ЛЮЯЯХБ СЙЮГЮРЕКЕИ ОНРНЙНБ 
	pthread_mutex_init(&foo_mutex,NULL);
	
	for (int i=0;i<n;i++)
		col_num[i]=i;
	
//================================================================================
//				создание потоков
//================================================================================
	for (int j=0;j<n;j++)
	{
		int result = pthread_create(&Thread[j], NULL, thread_func, &col_num[j]);
   		if (result != 0) 
   		{
     		perror("Creating the first thread");
     		return EXIT_FAILURE;
   		}
	} 
//===============================================================================
//			завершение потоков
//===============================================================================	
	for (int j=0;j<n;j++)
		pthread_join(Thread[j],NULL);


	print();
	getchar();
	return 0;
}
Но опять ошибки, помогите исправить
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 29.05.2010, 16:24   #2
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

все можно закрывать, разобралась
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает Mutex (MDI приложение) Terazoid Win Api 1 26.04.2010 16:53
Использование DBLookupComboBox Irina_87 Помощь студентам 45 10.12.2009 08:25
Использование while и while do prikolist Общие вопросы C/C++ 20 06.04.2009 18:40
использование RegConnectRegistry joker Win Api 3 18.02.2009 17:00
Использование обьектов UberStas Помощь студентам 2 13.06.2008 18:55