Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/68: Рейтинг темы: голосов - 68, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 14.03.2010
Сообщений: 11

Многопоточные приложения

31.05.2010, 01:44. Показов 13720. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать такую программу

Создать многопоточное приложение, в котором поток родитель создает файл и создает три дочерних потока, каждый из которых осуществляет запись своего идентификатора в файл 1000 раз.

или хотя бы посоветуйте литературу по этой теме, заранее очень благодарен
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.05.2010, 01:44
Ответы с готовыми решениями:

Windows sockets приложения с сокетами, написание приложения сервер-клиент
Написать программу-сервер и программу - клиент. Клиент читает файл, пересылает его серверу. Сервер, в свою очередь, пересылает файл всем...

Многопоточные приложения
Создайте приложение, которое в фоновом режиме проверяет правильно введенные числа. На главной форме разместите два многострочных редактора....

Многопоточные приложения
Доброго времени суток всем! Кто-нибудь может дать дельные ссылки на информацию/исходник по многопоточным приложениям?

35
98 / 94 / 16
Регистрация: 16.05.2010
Сообщений: 310
31.05.2010, 02:02
Литература. Там описаны средства создания параллельных программ.
Вложения
Тип файла: pdf labsa4.pdf (254.4 Кб, 627 просмотров)
1
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
31.05.2010, 03:12
IchMors, скажите, откуда вы взяли сей документ?
0
98 / 94 / 16
Регистрация: 16.05.2010
Сообщений: 310
31.05.2010, 10:26
Цитата Сообщение от niXman Посмотреть сообщение
IchMors, скажите, откуда вы взяли сей документ?
Лабораторные работы по параллельному программированию
0
 Аватар для deff78
11 / 11 / 2
Регистрация: 09.12.2009
Сообщений: 56
31.05.2010, 21:44
Забавно, но в этой методичке код тоже как будто не по-русски..)
0
1 / 1 / 0
Регистрация: 14.03.2010
Сообщений: 11
08.06.2010, 00:01  [ТС]
не разобрался, помогите пожалуйста с программой в стартовом топике
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
08.06.2010, 00:24
на самом деле, все очень просто
какой ЯП?
0
1 / 1 / 0
Регистрация: 14.03.2010
Сообщений: 11
08.06.2010, 00:35  [ТС]
niXman, что какой? =) сори за глупый вопрос что такое ЯП?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
08.06.2010, 00:37
Цитата Сообщение от masterkenny Посмотреть сообщение
что такое ЯП?
Язык Программирования.
0
1 / 1 / 0
Регистрация: 14.03.2010
Сообщений: 11
08.06.2010, 00:43  [ТС]
так я же указывал вроде что С++ под линуксом

Добавлено через 1 минуту
а нет извините не указал просто создал тему в этой ветке думал подразумевается
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
08.06.2010, 03:08
Лучший ответ Сообщение было отмечено как решение

Решение

ветка называется "С/С++ под Linux"
ок, накатаю. позже.

Добавлено через 2 часа 12 минут
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <fstream>
#include <pthread.h>
 
/***************************************************************************/
 
struct mutex {
   mutex() { pthread_mutex_init(&m, NULL); }
   ~mutex() { pthread_mutex_destroy(&m); }
 
   void lock() { pthread_mutex_lock(&m); }
   void unlock() { pthread_mutex_unlock(&m); }
private:
   pthread_mutex_t m;
};
 
struct mutex_locker {
   mutex_locker(mutex& m_):m(m_) { m.lock(); }
   ~mutex_locker() { m.unlock(); }
private:
   mutex& m;
};
 
struct thread_args {
   thread_args(std::ostream& f_, mutex& m_, int c_)
      :file(f_),m(m_),c(c_)
   {}
   /**  */
   std::ostream& file;
   mutex& m;
   int c;
};
 
void* thread_func(void* p) {
   thread_args* args = reinterpret_cast<thread_args*>(p);
   for ( int i = 0; i < args->c; ++i ) {
      mutex_locker locker(args->m);
      args->file << pthread_self() << std::endl;
   }
   return NULL;
}
 
/***************************************************************************/
 
int main(int argv, const char** argc) {
   std::ofstream file("file.txt", std::ios::out|std::ios::trunc);
   if ( !file ) {
      std::cerr << "can`t create file!" << std::endl;
      return 1;
   }
   const int thcount = 3;
   const int cycles = 1000;
   mutex m;
   pthread_t threads[thcount] = {0};
   thread_args args(file, m, cycles);
 
   pthread_create(&threads[0], NULL, thread_func, (void*)&args);
   pthread_create(&threads[1], NULL, thread_func, (void*)&args);
   pthread_create(&threads[2], NULL, thread_func, (void*)&args);
 
   std::cout << "starting " << thcount << " threads\nwaiting for finish..." << std::endl;
 
   pthread_join(threads[0], NULL);
   pthread_join(threads[1], NULL);
   pthread_join(threads[2], NULL);
 
   std::cout << "all threads are finished" << std::endl;
   return 0;
}
 
/***************************************************************************/
все превосходно работает.
любопытно, как благодарить будешь
4
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
22.08.2010, 16:20
Нужно написать аналогичное приложение, только под окна. niXman, спасибо за пример.
У меня возникли некоторые сложности при его компиляции:

threads.cpp(38): error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "pthread_t" (или приемлемое преобразование отсутствует)
если закомментить данную строку, то выводит:
1>Построение начато 22.08.2010 16:14:36.
1>InitializeBuildStatus:
1> Обращение к "Debug\threads.unsuccessfulbuild".
1>ClCompile:
1> threads.cpp
1>ManifestResourceCompile:
1> Для всех выходных данных обновления не требуется.
1>threads.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__pthread_mutex_lock в функции "public: void __thiscall mutex::lock(void)" (?lock@mutex@@QAEXXZ)
1>threads.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__pthread_mutex_unlock в функции "public: void __thiscall mutex::unlock(void)" (?unlock@mutex@@QAEXXZ)
1>threads.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__pthread_join в функции _main
1>threads.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__pthread_create в функции _main
1>threads.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__pthread_mutex_init в функции "public: __thiscall mutex::mutex(void)" (??0mutex@@QAE@XZ)
1>threads.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__pthread_mutex_destroy в функции "public: __thiscall mutex::~mutex(void)" (??1mutex@@QAE@XZ)
1>\Projects\threads\Debug\threads.exe : fatal error LNK1120: 6 неразрешенных внешних элементов
1>
1>СБОЙ построения.
Я так понимаю у меня неправильно подключен pthread.h Я скачал архив с ним (отсюда: ftp://sourceware.org/pub/pthreads-win32 файл pthreads-w32-2-8-0-release.exe) и распаковал его прямо в папку: Microsoft Visual Studio\VC\include, видимо нужно сделать что-то ещё.
Подскажите как правильно установить и подключить эту библиотеку, если проблема в этом.
Всем спасибо!
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
22.08.2010, 16:26
Цитата Сообщение от Union Посмотреть сообщение
бинарный "<<": не найден оператор, принимающий правый операнд типа "pthread_t"
так:
C++
1
args->file << (size_t)pthread_self() << std::endl;
остальные ошибки из-за не подключенной статической библиотеки, которая должна быть в инсталяторе(архиве). ищи файл с расширением .lib
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
22.08.2010, 18:34
C++
1
args->file << (size_t)[U]pthread_self[/U]() << std::endl;
Так подчеркивает pthread_self: "не существует подходящей функциипреобразования "pthread_t" в "size_t""
error C2440: приведение типов: невозможно преобразовать "pthread_t" в "size_t"

Все найденные в архиве .lib файлы:
COPYING.LIB
pthreadVCE2.lib
pthreadVC2.lib
pthreadVSE2.lib
поместил в Microsoft Visual Studio\VC\lib
Проблема не решилась...
подскажите где можно почитать про подключение статических библиотек?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
22.08.2010, 18:57
Union, вот програмка, которая вроде-бы в потоках заполняет матрицу случайными числами. Писал сам, может так и не правильно делать, но работает...
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
 
#define ROWS 5
#define COLUMNS 10
 
typedef struct{
    int * pArr;
    size_t nSize;
    unsigned nSeed;
} arg_t;
 
void * random_fill(void * pVoid){
    int i;
    arg_t * pArg;
    
    pArg = (arg_t*)pVoid;
    for ( i = 0; i < pArg->nSize; ++i )
        pArg->pArr[i] = rand_r(&pArg->nSeed) % 100;
    
    return NULL;
}
 
 
 
int main(void){
    int matrix[ROWS][COLUMNS], i, j;
    pthread_t threads[ROWS];
    arg_t args[ROWS];
    
    srand(time(NULL));
    for ( i = 0; i < ROWS; ++i ){
        args[i].pArr = &matrix[i][0];
        args[i].nSize = COLUMNS;
        args[i].nSeed = rand();
        if ( pthread_create(&threads[i], NULL, random_fill, (void*)&args[i]) ){
            fprintf(stderr, "Can't create a thread!\n");
            exit(EXIT_FAILURE);
        }
    }
    for ( i = 0; i < ROWS; ++i )
        pthread_join(threads[i], NULL);
    
    for ( i = 0; i < ROWS; ++i )
        for ( j = 0; j < COLUMNS; ++j )
            printf("%02d%c", matrix[i][j], ( j < COLUMNS - 1 ) ? ' ' : '\n');
    
    exit(EXIT_SUCCESS);
}
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
22.08.2010, 19:00
easybudda спасибо за пример, но у меня проблема с подключением библиотек. В данном случае это pthread.h
Никак не могу найти как они подключаются.
Подскажете как вы её устанавливали?
Я начал вот так:
1. Скачал отсюда ftp://sourceware.org/pub/pthreads-win32 файл pthreads-w32-2-8-0-release.exe
2. далее распаковал из него папку pthreads.2 в Microsoft Visual Studio\VC\include После этого функции перестали подчеркиваться в VS, но при компиляции выводится то, что я писал выше...
3. Lib файла по всей видимости нет... и вот тут что делать дальше не понятно
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
22.08.2010, 19:03
Цитата Сообщение от Union Посмотреть сообщение
поместил в Microsoft Visual Studio
Под винду вот пример был с потоками: Максимальный элемент матрицы с использованием потоков
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
22.08.2010, 19:06
мне нужен кроссплатформенный вариант и к томуже дальше в любом случае придётся подключать другие библиотеки
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
22.08.2010, 19:13
Цитата Сообщение от Union Посмотреть сообщение
easybudda спасибо за пример, но у меня проблема с подключением библиотек. В данном случае это pthread.h
Никак не могу найти как они подключаются.
Подскажете как вы её устанавливали?
pthread.h - это заголовочный файл, лежит в /usr/include, включается соответственно
C
1
#include <pthread.h>
никаких дополнительных библиотек я не подключал, но можно вот так компилировать попробовать:
Code
1
gcc -o program program.c -lpthread
На всякий случай: а Вы в какой ОС и каким компилятором это собирать пытаетесь, а то вон и мелкостудия всплыла... Может я что-то пропустил, и её к линуху прикрутили?

Добавлено через 3 минуты
Цитата Сообщение от Union Посмотреть сообщение
мне нужен кроссплатформенный вариант
А вот с этим опаньки. Хоть в принципе pthread и означает POSIX thread, у мелкомягких на совместимость систем свой оригинальный взгляд... Попробуйте Qt потоки использовать - будет Вам кроссплатформенность...
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
22.08.2010, 19:19
Пока пишу приложение в конах, в VS2010 и компилирую её же компилятором.
Может я что-то пропустил, и её к линуху прикрутили?
не думаю что это случится

Добавлено через 5 минут
Мне кажется под Qt я примеров вообще не найду.
Буду пробовать дальше pthread.h подключить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.08.2010, 19:19
Помогаю со студенческими работами здесь

Многопоточные консольные приложения
подскажите сайт\книжку где почитать (обязательно с примерами) про многопоточные приложения, и только с консольными примерами. в этой...

Многопоточные приложения (остановить поток)
Доброго времени суток. У меня такая проблемка, программа включается в себя 2 дополнительных потока, которые создаются при старте проги: ...

Как проще проектировать многопоточные или асинхронные приложения?
Доброе утро! Подскажите, пожалуйста, какая есть документация на эту тему?

Как писать многопоточные приложения, использующие разделяемые ресурсы
Здравствуйте. Возможно, у кого-либо найдется время, чтобы показать, как писать многопоточные приложения, использующие разделяемые...

Многопоточные функции
Написал программу, которая обрабатывает большой объём информации и столкнулся с проблемой производительности. Начал копать в сторону...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru