想找操作系统可重入性的相关资料。结果没有找到。看了一下发现可重入性应该是指函数的可重入性。
在cdsn上看到相关解释。摘抄下来做参考。不知道windows是怎样实现这个可重入性的。^_^有待进一步研究。
---------------
要编写可重如函数,光靠控制变量的使用是不够的。还要控制系统资源的使用(例如文件句柄、Socket句柄等等)。
因此,可重入函数的编写是颇为复杂的。不过,最简单的就是设置临界区保护关键代码。当初,“DOS内核不可重入”是编写TSR(DOS内存驻留程序)的一大难题。后来,微软设置了一个DOS临界区,才使问题基本得以解决。
另一方法是上下文切换。将所有关键数据结构封装起来,并定义其复制操作。当需要重入时,复制一份关键数据结构,然后在其上操作。在回写的时候,这种方法依然需要临界区保护。但可以大大减少锁定的时间,避免死锁的发生。
系统在运行状态下,内存数据区可分为:全局静态区、堆和栈。全局静态区和堆由所有线程共享,栈则局部于线程。全局静态区包括所有全局变量和字符串等数据。堆包括动态分配的内存。局部变量、函数调用参数和返回值、返回地址等等都在栈中分配,函数返回后自然释放。
------------
楼上的全面
不过,一切全局/公用资源,都可以概括为“全局变量”,或者更时髦点,叫“全局对象”,例如屏幕(其实是显示缓冲区)、设备等。对变量的理解不必那么狭义。并非只有内存单元才是变量。
解决“全局变量”问题的办法有两个:
1. “消极”的,即不去访问任何全局变量,只要做到这点就肯定是可重入的了(虽然可能完成不了什么有意义的功能)。
2. 有时为了完成必要的功能,必须访问全局变量(主要是公用的系统资源,例如文件、端口等)。这时就必须用楼上的办法。