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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2014, 18:53   #1
Rolana
 
Аватар для Rolana
 
Регистрация: 29.11.2013
Сообщений: 9
Стрелка Управленние процессами и потоками. Каналы. (операционные системы)

Срочно нужно решить две задачки на языке С до 17.04. Я представления не имею, как это делать.

1) Написать программу "Пинг-Понг". Дано два потока. Первый генерирует случайным образом число от 0 до 10, посылает это число второму потоку. Второй поток плюсует двойку к данному числу и возвращает первому потоку. Первый плюсует тройку и возвращает второму потоку. Работа завершается, если число больше 100 Решить с помощью канала.

2) Дано целочисленный файл FILE_TO_SORT.DAT размером 5 GB. Отсортировать файл. Предложить оптимальное решение для 2-х ядерного ПК с Windows 7 (32 bit).

Буду очень благодарна!
Rolana вне форума Ответить с цитированием
Старый 12.04.2014, 19:34   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Баксов за 50 там решат, думаю )
Son Of Pain вне форума Ответить с цитированием
Старый 12.04.2014, 20:54   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
Баксов за 50 там решат, думаю )
а че, у нас доллар 300-400рублей стоит? - если нет - то не помогут. А если стоит - то помогу даже я
rrrFer вне форума Ответить с цитированием
Старый 14.04.2014, 14:27   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2Rolana
ну на первую
Код:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>

#define MAX_PING_COUNT 100

struct thread_data {
	int id;
	const char *name;
	size_t inc;
	int read_fd;
	int write_fd;
};

void *thread(void *data) {
	struct thread_data *td = data;
	int ball = 0;

	if (td->id == 1) {
		ball = rand() % 11;
		write(td->write_fd, &ball, sizeof(ball));
		printf("%s generated %d\n", td->name, ball);
	}

	while (1) {
		read(td->read_fd, &ball, sizeof(ball));
		printf("%s read %d\n", td->name, ball);

		ball += td->inc;
		if (ball > MAX_PING_COUNT) {
			exit(0);
		}

		write(td->write_fd, &ball, sizeof(ball));
	}

	return NULL;
}

int main(int argc, char *argv[]) {
	srand(time(0));

	int fds1[2], fds2[2];

	if (pipe(fds1) < 0 || pipe(fds2) < 0) {
		perror("pipe error:");
		return 0;
	}

	struct thread_data data[2] = { 
		{ .id = 1, .name = "ping_thread", .inc = 2, .read_fd = fds1[0], .write_fd = fds2[1] },
		{ .id = 2, .name = "pong_thread", .inc = 3, .read_fd = fds2[0], .write_fd = fds1[1] },
	};

	pthread_t threads[2];

	pthread_create(&threads[0], NULL, thread, &data[0]);
	pthread_create(&threads[1], NULL, thread, &data[1]);

	pthread_join(threads[0], NULL);
	pthread_join(threads[1], NULL);

	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 14.04.2014 в 14:30.
pproger вне форума Ответить с цитированием
Старый 14.04.2014, 23:16   #5
Rolana
 
Аватар для Rolana
 
Регистрация: 29.11.2013
Сообщений: 9
По умолчанию Аж плакать хочется)

У меня не работают библиотеки <unistd.h>, <pthread.h>
Rolana вне форума Ответить с цитированием
Старый 15.04.2014, 06:28   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от Rolana Посмотреть сообщение
У меня не работают библиотеки <unistd.h>, <pthread.h>
Потому что pproger написал код для линукс. Тебе придется либо ставить линукс, либо собирать его в mingw, либо переписать с использованием std::thread или виндовых функций для работы с потоками.
Choose your destiny ))
Son Of Pain вне форума Ответить с цитированием
Старый 15.04.2014, 09:25   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2Son Of Pain
Цитата:
Потому что pproger написал код для линукс
да нет, для любой posix совместимой ос

Цитата:
либо переписать с использованием std::thread
Цитата:
на языке С
okay
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операционные системы. Dmitry_Web Обсуждение статей 1 09.10.2012 20:19
Операционные системы Bustle Свободное общение 32 24.12.2010 16:39
Операционные системы!!!!!!!! lera93 Помощь студентам 12 20.12.2010 11:41
Операционные Системы Bauer Помощь студентам 3 31.05.2010 05:19
Операционные системы slipokorn Помощь студентам 0 26.05.2010 05:05