waqur: (Евро)
[personal profile] waqur
Некоторые люди не понимают, почему в Win32 API нет аналога системного вызова fork(2) из POSIX API. Ведь его можно реализовать на основе функции NtCreateProcess из NT Native API! В справочнике Гэри Нэббета даже есть соответствующий пример.

Это достаточно просто объяснить: разветвление процессов несовместимо с глобальными (межпроцессными) мьютексами. Если на момент разветвления мьютекс находился в заблокированном состоянии, тогда какой из двух процессов должен оказаться владельцем этой блокировки? И как уведомить о произошедшем событии lock elision библиотечный код, который не рассчитан на получение таких уведомлений?

В POSIX подсистеме Windows NT (MS Services for UNIX, также известной под торговой маркой Interix) есть fork, и следовательно нет глобальных мьютексов.

А в подсистеме Win32 есть глобальные мьютексы, а значит нет fork'а.

В "настоящих" POSIX-системах, таких как Linux и FreeBSD, есть и fork, и pthread-мьютексы, но природа этих мьютексов отличается от природы мьютексов Win32 — они процесс-локальны, примерно как критические секции в Win32. Таким образом, они могут пережить разветвление, не мешая друг другу в двух новых процессах.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

March 2024

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Автор стиля

Развернуть

No cut tags
Page generated 2026-05-07 05:57 pm
Powered by Dreamwidth Studios