在复习微软的过程中还是不够全面,为了帮助广大考生系统全面的复习好《微软认证》,我们考吧(kao8.cc)整理了微软考试辅导知识,希望本次汇编的辅导资料希望对你的考试有所帮助,预祝你考试顺利。
首先,稍微修改一下刚刚的代码:
#include
#include
int main(int argc,char **argv){
if(fork()){
printf("This is parent process.");
for(;;);
}
else{
printf("This is chile process.");
for(;;);
}
return 0;
}
使用GCC编译这段代码并将编译所得的程序修改为exe后缀,随后关闭所有的POSIX进程。找一个好用一点的进程监视软件(推荐Sysinternals的Process Explorer),看看现在的进程状况。大致应该如下所示:
需要注意的是posix.exe进程已经不存在了。回想前文所述,posix.exe是POSIX的会话进程,没有posix.exe也就间接说明了没有POSIX应用程序正在运行。
现在我们启动刚才编译的程序,现在Process Explorer的界面应该如下所示:
嗯嗯,我们的程序和它fork出的子进程正在高高兴兴地运行着,因为我们在程序中添加了死循环所以进程不会立刻退出,而是像没有出口的自旋锁一样饕餮着CPU资源...嗯,这些都不重要,重要的是posix.exe的重回人间就是那个pid为5556的进程。现在,只要我们在运行着test1.exe的Shell中按下Ctrl+C,test1.exe父子就和posix.exe先生一起去进程天国报到了^^
(顺便插一句题外话,.Net Framework 4的TPL中好像有提供SpinLock结构支持自旋锁的功能,虽然使用自旋锁的花销会比较小,但是请谨慎使用这个结构,尤其是不要用于可能发生长时间锁定的操作——否则会发生什么,骤然上涨的CPU使用率曲线...毕竟自旋锁就是通过循环实现的,不同于互斥锁,自旋锁会一直处于忙等的状态,直到时间片结束,然后是下一个时间片...下下个时间片...)
编辑推荐: