entercriticalsection(entercriticalsection 占用cpu)
临界是什么意思
临界是指由某一种状态或物理量转变为另一种状态或物理量的最低转化条件;或者由一种状态或物理量转变为另一种状态或物理量。
1、每种物质都有一个特定的温度,在这个温度以上,无论怎样增大压强,气态物质不会液化,这个温度就是临界温度。
2、通常把在临界温度以上的气态物质叫做气体,把在临界温度以下的气态物质叫做汽体。
进程进入临界区的调度原则是:
1、如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
2、任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
3、进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
4、如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
其他问题:
在使用临界区时,一般不允许其运行时间过长,只要进入临界区的线程还没有离开,其他所有试图进入此临界区的线程都会被挂起而进入到等待状态,并会在一定程度上影响程序的运行性能。尤其需要注意的是不要将等待用户输入或是其他一些外界干预的操作包含到临界区。
如果进入了临界区却一直没有释放,同样也会引起其他线程的长时间等待。换句话说,在执行了EnterCriticalSection()语句进入临界区后无论发生什么,必须确保与之匹配的
LeaveCriticalSection()都能够被执行到。可以通过添加结构化异常处理代码来确保LeaveCriticalSection()语句的执行。虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。
以上内容参考:百度百科-临界
什么时候需要调用EnterCriticalSection
临界区的为了解决多个线程同时访问资源的问题。
假如你有2个线程,都要对文件A进行读写,但是在同时一时刻只允许一个线程使用这个文件,这个时候就需要用到临界区。如果你不做任何控制,就可能一个线程在写文件,而另一个线程也在写文件,这样一来,写进去的内容就乱套了。
-------------------------------------------------------
我因该在什么时候调用EnterCriticalSection来进入临界区
这个要看具体应用,临界区函数有一对,你在使用的时候也必须成对使用,否则会有死锁。
EnterCriticalSection时候错误,请问大侠
具体错误是贴出来。
函数 EnterCriticalSection要和LeaveCriticalSection成对出现才可以。
而且在使用EnterCriticalSection,必须InitializeCriticalSection进行初始化
InitializeCriticalSection(cs);//初始化临界区