Windows 进程进入临界区的调度原则
来源:互联网 发布:java 多线程源码分析 编辑:程序博客网 时间:2024/05/17 09:34
进程进入临界区的调度原则是:
①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
④如果进程不能进入自己的临界区,则应让出 CPU,避免进程出现“忙等”现象。
#include <windows.h>
#include <iostream>
#include <tchar.h>
using namespace std;
DWORD WINAPI FuncProc3(LPVOID lpParameter);
DWORD WINAPI FuncProc4(LPVOID lpParameter);
int ctickets = 100;
CRITICAL_SECTION g_csA;
void main(void)
{
InitializeCriticalSection(&g_csA);
InitializeCriticalSection(&g_csB);
HANDLE thread1;
HANDLE thread2;
thread1 = CreateThread(NULL, 0, FuncProc3, NULL, 0, NULL);
thread2 = CreateThread(NULL, 0, FuncProc4, NULL, 0, NULL);
CloseHandle(thread1);
CloseHandle(thread2);
Sleep(4000);
DeleteCriticalSection(&g_csA);
DeleteCriticalSection(&g_csB);
system("pause");
}
DWORD WINAPI FuncProc3(LPVOID lpParameter)
{
while(TRUE)
{
EnterCriticalSection(&g_csA);
//Sleep(100);
Sleep(1);
if(ctickets > 0)
{
cout<<"thread1 sell ticket: "<<ctickets--<<endl;
LeaveCriticalSection(&g_csA);
}else{
LeaveCriticalSection(&g_csA);
break;
}
}
return 0;
}
DWORD WINAPI FuncProc4(LPVOID lpParameter)
{
while(TRUE)
{
EnterCriticalSection(&g_csA);
// Sleep(100);
Sleep(1);
if(ctickets > 0)
{
cout<<"thread2 sell ticket: "<<ctickets--<<endl;
}else{
break;
}
LeaveCriticalSection(&g_csA);
}
return 0;
}
上面这段代码如果把休眠时间改成0.1秒,则会报内存地址访问错误。
(开发环境:windows7、Microsoft Visual Studio 2008)
参考:http://baike.baidu.com/view/1237110.htm
- Windows 进程进入临界区的调度原则
- windows C++ 进入临界区 退出临界区
- 抢占进程调度的原则
- 4、进程同步:进程同步的概念和同步原则,临界资源和临界区的概念,信号量及其应用,经典进程同步问题
- C语言进程通过信号量进入临界区
- 能一次进临界区的时候,不要多次进入
- Windows 临界区 解决进程互斥问题
- 进程PCB、临界区
- 线程、进程、临界区
- windows下临界区的使用
- windows 临界区的实现原理
- Windows 之临界区
- WINDOWS临界区
- windows临界区
- windows 临界区
- 【进程&线程】临界区解决方法
- 进程间同步临界区的Peterson算法
- Linux和windows临界区
- 好想找个伴
- 关于ASP.NET中TreeView控件的一些体会
- 分离链接散列表实现文件C语言
- oracle算记录大小
- oracle算记录大小
- Windows 进程进入临界区的调度原则
- 开始试着玩玩QT designer
- struts2的学习笔记
- Google搜索指令大全(收藏)
- 组合数字
- 游戏人生
- django+apache配置网站的robots.txt和sitemaps等理静态文件
- Codeforces Beta Round #35 (Div. 2) C (BFS~水~)
- 求大数(用数组存放)