Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2

Объясните принцип создания многопоточности

04.05.2012, 11:10. Показов 1491. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте, объясните пожалйста как сделать программу многопоточной, у меня есть одна программа, в которой большая нагрузка идет на главный цикл, если я правильно понимаю, то он обрабатывается одним потоком одного ядра процессора, как правильно оформить код, чтобы нагрузка равномерно распределялась на все ядра?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2012, 11:10
Ответы с готовыми решениями:

Объясните принцип
printf("%.2lf", x) Объясните пожалуйста понятным языком, что делает эта вещь "%.2lf"?

Объясните принцип бинарного поиска
Можно, пожалуйста, пример или принцип бинарного поиска. С++ для очень сильно начинающих.

объясните принцип работы цикла : ?
объясните принцип работы цикла : ?

5
95 / 64 / 5
Регистрация: 03.07.2011
Сообщений: 148
04.05.2012, 12:05
У вас в чем вопрос : как создать поток или как привязать его к конкретному ядру? Механизм многопоточности не обязательно должен работать на нескольких ядрах - до появления многоядерных процессоров все великолепно работало на одноядерных. Если вкратце, то в системе есть шедулер (планировщик потоков), который в зависимости от приоритета потока выдает ему порции процессорного времени.

Добавлено через 18 минут
Сам поток создается функцией CreateThread, привязка его к конкретному ядру выполняется функцией SetThreadAffinityMask (в Windows).
1
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
04.05.2012, 14:07  [ТС]
Например у меня 4-хядерный процессор, каждое ядро может выполнять 2 потока, в одном видеоконвертере видела как при конвертировании большого количества фильмов обрабатываются 8 фильмов одновременно, как на этом примере сделать подобное?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    bool bExit = false; 
 
    while( bExit != true ) 
    {
        function_1();
        function_2();
        function_3();
 
    }
    return 0;
}
0
95 / 64 / 5
Регистрация: 03.07.2011
Сообщений: 148
04.05.2012, 14:20
programina, работа с потоками имеет ряд особенностей - синхронизация, приоритеты и прочее. Кроме того, весьма полезно знать, как они работают в системе. Очень советую Вам сначала почитать про потоки и работу с ними - всех советов здесь все равно не дашь, в конечном итоге придется пересказать книгу Неплохо про потоки написано у Джефри Рихтера, например в книге "Windows для профессионалов. Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows.".
1
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
04.05.2012, 19:21  [ТС]
С одновременным запуском разных функций ясно, сделать можно с помощью винапишной функции CreateThread, данная программа выводит одновременно четыере месажбокса:
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
#include <windows.h>
 
DWORD   dwThreadId;
 
DWORD WINAPI function_1( LPVOID lpParam );
DWORD WINAPI function_2( LPVOID lpParam );
DWORD WINAPI function_3( LPVOID lpParam );
DWORD WINAPI function_4( LPVOID lpParam );
 
 
int main()
{
    CreateThread( NULL, 0, function_1, 0, 0, &dwThreadId );
    CreateThread( NULL, 0, function_2, 0, 0, &dwThreadId );
    CreateThread( NULL, 0, function_3, 0, 0, &dwThreadId );
    CreateThread( NULL, 0, function_4, 0, 0, &dwThreadId );
 
    system( "pause" );
    return 0;
}
 
DWORD WINAPI function_1( LPVOID lpParam )
{
    MessageBox( NULL, "# 1", "msg", 0 );
    return( 0 );
}
 
DWORD WINAPI function_2( LPVOID lpParam )
{
    MessageBox( NULL, "# 2", "msg", 0 );
    return( 0 );
}
 
DWORD WINAPI function_3( LPVOID lpParam )
{
    MessageBox( NULL, "# 3", "msg", 0 );
    return( 0 );
}
 
DWORD WINAPI function_4( LPVOID lpParam )
{
    MessageBox( NULL, "# 4", "msg", 0 );
    return( 0 );
}
function_1, function_2, function_3 и function_4 выполняются одновременно, но каждый раз почему то в разной последовательности, еще научиться управлять ими так как нужно мне.

Добавлено через 19 минут
Добавила в начало каждой функции задержку при помощи Sleep(...)
C++
1
2
3
4
5
6
7
8
9
10
11
12
DWORD WINAPI function_1( LPVOID lpParam )
{
    Sleep(400);
    MessageBox( NULL, "# 1", "msg", 0 );
    return( 0 );
}
DWORD WINAPI function_2( LPVOID lpParam )
{
    Sleep(300);
    MessageBox( NULL, "# 2", "msg", 0 );
    return( 0 );
}
Теперь сначала появляется месажбокс "# 2", а потом "# 1"
0
95 / 64 / 5
Регистрация: 03.07.2011
Сообщений: 148
04.05.2012, 20:30
Я вижу, что вы проигнорировали мою рекомендацию насчет изучения литературы. Поверьте, подобные вопросы уже задавались и разбирались. Есть приоритеты, есть синхронизация - прошу вас, почитайте, многие вопросы отпадут сами собой. Кроме того, знания основ помогут выбрать изначально правильное направление-так, чтобы потом не пришлось переделывать все заново.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2012, 20:30
Помогаю со студенческими работами здесь

Объясните принцип работы программы
Добрый день, мне нужно понять, как работает эта программа (она находит самое длинное слово из текста). Желательно рассказать про каждую...

Объясните, пожалуйста, принцип работы.
Есть прога, считает сумму ряда, но ряд - знакочередующийся (-1,1,-1,...). При подсчете программа заканчивае работу на 1023 члене. Но чем...

Объясните принцип работы кода
#include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL,...

Объясните принцип работы программы
Добрый день ( вечер ). Мне дано было задание: Определить класс, объектами которого являются многоугольники указанного типа. ...

Объясните принцип работы программы
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;conio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru