Люди, знакомые с программированием WIN32, должны знать, что метод управления процессами в WIN32 сильно отличается от метода в Linux. В UNIX есть только концепция процесса, но в WIN32 есть еще концепция «потока», поэтому в Linux. и WIN32 здесь. Какая разница?
Процесс/поток в WIN32 унаследован от OS/2. В WIN32 «процесс» относится к программе, а «поток» — это «подсказка» выполнения в «процессе». С точки зрения ядра, многопроцессорность WIN32 мало чем отличается от таковой в Linux. Поток в WIN32 эквивалентен процессу Linux и представляет собой фактически исполняемый код. Однако в WIN32 сегменты данных совместно используются потоками одного и того же процесса. Это самое большое отличие от процесса Linux.
Следующая программа показывает, как следующий процесс WIN32 запускает поток.
интервал г; DWORD WINAPI ChildProcess(LPVOID lpParameter){ интервал я; для (я = 1; я <1000; я ++) { г++; printf( "Это дочерняя тема: %dn", g ); } Выходной поток(0); }; недействительный основной() { INT ThreadID; интервал я; г = 0; CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID ); для (я = 1; я <1000; я ++) { г++; printf("Это родительский поток: %dn", g); } }
В WIN32 функция CreateThread используется для создания потока. В отличие от создания процесса в Linux, поток WIN32 не запускается с точки создания. Вместо этого CreateThread задает функцию, и поток запускается из этой функции. Эта программа аналогична предыдущей программе UNIX: каждый из двух потоков печатает по 1000 фрагментов информации. threadID — это номер дочернего потока. Кроме того, глобальная переменная g является общей для дочернего и родительского потоков. Это самое большое отличие от Linux. Как видите, процесс/поток WIN32 сложнее, чем в Linux. Реализовать поток, аналогичный WIN32, в Linux несложно, поскольку после разветвления дочерний процесс вызывает функцию ThreadProc и открывает общий доступ. область данных для глобальных переменных Однако реализовать функции, подобные fork, под WIN32 невозможно. Таким образом, хотя библиотечные функции, предоставляемые компилятором языка C под WIN32, уже совместимы с большинством библиотечных функций Linux/UNIX, fork все еще не может быть реализован.
Для многозадачных систем совместное использование областей данных необходимо, но это также проблема, которая может легко вызвать путаницу. В WIN32 программист может легко забыть, что данные между потоками являются общими после того, как поток изменяет переменную, а другой поток изменяет. это, вызывая проблемы с программой. Однако в Linux, поскольку переменные изначально не являются общими, программист явно указывает данные, которые будут использоваться совместно, что делает программу более понятной и безопасной.
Что касается понятия «процесс» в WIN32, то его значением является «приложение», что эквивалентно exec в UNIX.