Quem está familiarizado com a programação WIN32 deve saber que o método de gerenciamento de processos do WIN32 é muito diferente do Linux. No UNIX existe apenas o conceito de processo, mas no WIN32 existe também o conceito de "thread", então Linux. e WIN32 estão aqui Qual é a diferença?
O processo/thread no WIN32 é herdado do OS/2. No WIN32, “processo” refere-se a um programa e “thread” é uma “pista” de execução em um “processo”. Do ponto de vista central, o multiprocesso do WIN32 não é muito diferente daquele do Linux. O thread no WIN32 é equivalente ao processo do Linux e é um código de execução real. No entanto, no WIN32, os segmentos de dados são compartilhados entre threads no mesmo processo. Esta é a maior diferença do processo Linux.
O programa a seguir mostra como o próximo processo do WIN32 inicia um thread.
intg; DWORD WINAPI ChildProcess(LPVOID lpParameter){ int eu; para (eu = 1; eu <1000; eu ++) { g++; printf("Este é o tópico filho: %dn", g); } ExitThread(0); }; vazio principal() { int threadID; int eu; g = 0; CreateThread(NULL, 0, ChildProcess, NULL, 0, &threadID); para (eu = 1; eu <1000; eu ++) { g++; printf("Este é o thread pai: %dn", g); } }
No WIN32, a função CreateThread é usada para criar um thread. Ao contrário da criação de um processo no Linux, o thread WIN32 não começa a ser executado a partir do ponto de criação. Em vez disso, CreateThread especifica uma função e o thread começa a ser executado a partir dessa função. Este programa é igual ao programa UNIX anterior, com dois threads cada um imprimindo 1.000 informações. threadID é o número do thread do thread filho. Além disso, a variável global g é compartilhada pelo thread filho e pelo thread pai. Esta é a maior diferença do Linux. Como você pode ver, o processo/thread do WIN32 é mais complicado do que o do Linux. Não é difícil implementar um thread semelhante ao WIN32 no Linux, desde que após a bifurcação, o processo filho chame a função ThreadProc e abra um compartilhamento. área de dados para variáveis globais No entanto, é impossível implementar funções semelhantes ao fork no WIN32. Portanto, embora as funções da biblioteca fornecidas pelo compilador da linguagem C no WIN32 já sejam compatíveis com a maioria das funções da biblioteca Linux/UNIX, o fork ainda não pode ser implementado.
Para sistemas multitarefa, o compartilhamento de áreas de dados é necessário, mas também é um problema que pode facilmente causar confusão. No WIN32, um programador pode facilmente esquecer que os dados entre threads são compartilhados depois que um thread modifica uma variável, mas outro thread é modificado. isso, causando problemas no programa. Porém, no Linux, como as variáveis não são originalmente compartilhadas, o programador especifica explicitamente os dados a serem compartilhados, tornando o programa mais claro e seguro.
Quanto ao conceito de “processo” no WIN32, seu significado é “aplicativo”, que equivale a exec no UNIX.