Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
20 / 18 / 6
Регистрация: 25.11.2017
Сообщений: 620
1

Многопоточность и процессы

20.06.2019, 11:54. Показов 1475. Ответов 5
Метки нет (Все метки)

Начал изучать многопоточность и реализацию ее на плюсах. Посоветуйте толковую литературу с хорошими примерами для понимания данного материала.

Добавлено через 2 минуты
И насколько я понял, то в одном потоке может быть несколько процессов. То есть процесс это часть потока, верно?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2019, 11:54
Ответы с готовыми решениями:

C++ Многопоточность
Как сделать так, чтобы эта программа заработала? А то она мне вот что пишет: g++ test.cpp -o...

THREAD.H (многопоточность)
нужно срочно разобраться в этой теме, но компилятор не находит THREAD.H #include <thread> ...

Процессы и потоки c++
Написал код по методичке, который открывает файл Word и отдельно может открывать и закрывать...

Многопоточность
Добрый вечер. Назрела тут проблема с многопоточностью. Вкратце: Есть программа, которая считывает...

5
825 / 249 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
20.06.2019, 12:41 2
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
И насколько я понял, то в одном потоке может быть несколько процессов.
Скорее наоборот.
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
Посоветуйте толковую литературу
Литература C++
1
Эксперт С++
2374 / 1989 / 292
Регистрация: 03.05.2011
Сообщений: 4,413
Записей в блоге: 13
21.06.2019, 16:41 3
Лучший ответ Сообщение было отмечено Andy_Coldfield как решение

Решение

Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
в одном потоке может быть несколько процессов. То есть процесс это часть потока, верно?
нет.
любой winapi или crt вызов функций создания потока сводится к вызову нативной функции из ядра
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
typedef signed __int64(__fastcall* __ptr64 _NtCreateThread)(
    /*_Out_*/ HANDLE* __ptr64 ThreadHandle,
    /*_In_*/ unsigned __int32  DesiredAccess,
    /*_In_opt_ */ OBJECT_ATTRIBUTES* __ptr64 ObjectAttributes,
    /*_In_*/ HANDLE ProcessHandle,
    /*_Out_*/ CLIENT_ID64* __ptr64 ClientId,
    /*_In_*/ CONTEXT* __ptr64 ThreadContext,
    /*_In_*/ INITIAL_TEB* __ptr64 InitialTeb,
    /*_In_*/ unsigned __int8 CreateSuspended
    );
 
typedef signed __int64(__fastcall* __ptr64 _NtCreateThreadEx)(
    /*_Out_*/ HANDLE* __ptr64 ThreadHandle,
    /*_In_*/ unsigned __int32 DesiredAccess,
    /*_In_opt_*/ OBJECT_ATTRIBUTES* __ptr64 ObjectAttributes,
    /*_In_*/ HANDLE ProcessHandle,
    /*_In_*/ void* __ptr64 StartRoutine, // PUSER_THREAD_START_ROUTINE
    /*_In_opt_*/ void* __ptr64 Argument,
    /*_In_*/ unsigned __int32 CreateFlags, // THREAD_CREATE_FLAGS_*
    /*_In_*/ unsigned __int64 ZeroBits,
    /*_In_*/ unsigned __int64 StackSize,
    /*_In_*/ unsigned __int64 MaximumStackSize,
    /*_In_opt_*/ PS_ATTRIBUTE_LIST* __ptr64 AttributeList
    );
хендл потока инициализируется только в том случае, если в функцию передан хендл процесса.
процесс может иметь несколько потоков, созданных функциями NtCreateThread/NtCreateThreadEx
поток без процесса существовать не может.
2
20 / 18 / 6
Регистрация: 25.11.2017
Сообщений: 620
23.06.2019, 16:50  [ТС] 4
_lunar_, ничего не понял из выше написанного Вами) Видимо мои познания очень скудны и надо наверстывать))
0
Эксперт С++
8426 / 4099 / 894
Регистрация: 15.11.2014
Сообщений: 9,211
23.06.2019, 17:01 5
Andy_Coldfield, он имел ввиду, что всё наоборот: один процесс может иметь несколько потоков
1
Эксперт С++
2374 / 1989 / 292
Регистрация: 03.05.2011
Сообщений: 4,413
Записей в блоге: 13
24.06.2019, 11:46 6
Цитата Сообщение от Andy_Coldfield Посмотреть сообщение
ничего не понял из выше написанного Вами
я привел прототип функции NtCreateThread.
если посмотреть параметры этой функции, то можно увидеть что в неё передаётся хендл процесса (HANDLE ProcessHandle), причём он обязателен для заполнения.
логично, что если у вас нет хендла процесса (т.е. данный параметр заполняется как NULL), то и функция NtCreateThread отработает не правильно, и на выходе хендл потока (HANDLE* __ptr64 ThreadHandle) будет равен NULL.

просто мне показалось, что на таком примере легче понять что есть процесс и что поток.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2019, 11:46

Многопоточность
Товарищи! Создаю 23 потока. вот так: ff1 = new f1(false); ff1->Priority = tpLower;...

Многопоточность
Есть такая трудность: 2 потока, первый считает, а второй каждом 10мс такте пишет в базу данных то...

Многопоточность
Здравсвуйте программисты! Дали лабораторную написать по многопоточности, никогда сталкивался с...

CppWebBrowser и Многопоточность
Не смотря на то, что CppWebBrowser сам по себе как браузер создает потоки и работает с ними, когда...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.