windows via c/c++ 学习笔记(一)
2009-07-15 22:06
453 查看
以前从第一章看到第七章,没注意做笔记,如今拾起,已忘得差不多了,所以趁暑假时间充裕,决心做好笔记,以备同志们和我自己学习查阅.
因此,本学习笔记从第八章开始写起......
(一)用户模式下的线程同步
同步方法一:Interlocked系列函数
同步方法二:应避免的方法
volatileBOOLg_fFinishedCalculation=FALSE;
intWINAPI_tWinMain(...){
CreateThread(...,RecalcFunc,...);
...
//Waitfortherecalculationtocomplete.
while(!g_fFinishedCalculation)
;
...
}
DWORDWINAPIRecalcFunc(PVOIDpvParam){
//Performtherecalculation.
...g_fFinishedCalculation=TRUE;
return0;
}
注意BOOLg_fFinishedCalculation的值必须是:volatile,以防止编译器优化.
同步方法三:
1.速度快,但是无法再多个进程之间对线程进行同步.
2.注意还有一个函数TryEnterCriticalSection()
3.Touseaspinlockwithacriticalsection,
youshouldinitializethecriticalsectionbycallingthisfunction:
BOOLInitializeCriticalSectionAndSpinCount(
PCRITICAL_SECTIONpcs,
DWORDdwSpinCount);
同步方法四:Slim读写锁
写:
VOIDAcquireSRWLockExclusive(PSRWLOCKSRWLock);
VOIDReleaseSRWLockExclusive(PSRWLOCKSRWLock);
读:
VOIDAcquireSRWLockShared(PSRWLOCKSRWLock);
VOIDReleaseSRWLockShared(PSRWLOCKSRWLock);
因此,本学习笔记从第八章开始写起......
(一)用户模式下的线程同步
同步方法一:Interlocked系列函数
同步方法二:应避免的方法
volatileBOOLg_fFinishedCalculation=FALSE;
intWINAPI_tWinMain(...){
CreateThread(...,RecalcFunc,...);
...
//Waitfortherecalculationtocomplete.
while(!g_fFinishedCalculation)
;
...
}
DWORDWINAPIRecalcFunc(PVOIDpvParam){
//Performtherecalculation.
...g_fFinishedCalculation=TRUE;
return0;
}
注意BOOLg_fFinishedCalculation的值必须是:volatile,以防止编译器优化.
同步方法三:
constintCOUNT=10;
intg_nSum=0;
CRITICAL_SECTIONg_cs;
DWORDWINAPIFirstThread(PVOIDpvParam){
EnterCriticalSection(&g_cs);
g_nSum=0;
for(intn=1;n<=COUNT;n++){
g_nSum+=n;
}
LeaveCriticalSection(&g_cs);
return(g_nSum);
}
DWORDWINAPISecondThread(PVOIDpvParam){
EnterCriticalSection(&g_cs);
g_nSum=0;
for(intn=1;n<=COUNT;n++){
g_nSum+=n;
}
LeaveCriticalSection(&g_cs);
return(g_nSum);
}
1.速度快,但是无法再多个进程之间对线程进行同步.
2.注意还有一个函数TryEnterCriticalSection()
3.Touseaspinlockwithacriticalsection,
youshouldinitializethecriticalsectionbycallingthisfunction:
BOOLInitializeCriticalSectionAndSpinCount(
PCRITICAL_SECTIONpcs,
DWORDdwSpinCount);
同步方法四:Slim读写锁
写:
VOIDAcquireSRWLockExclusive(PSRWLOCKSRWLock);
VOIDReleaseSRWLockExclusive(PSRWLOCKSRWLock);
读:
VOIDAcquireSRWLockShared(PSRWLOCKSRWLock);
VOIDReleaseSRWLockShared(PSRWLOCKSRWLock);
相关文章推荐
- 《Windows via C/C++》 学习笔记
- windows via c/c++ 学习笔记(二) 内核同步
- windows via c/c++ 学习笔记(三) 线程池
- 《Windows via C/C++》学习笔记 —— 线程的调度
- 《Windows Via C/C++》边学习,边翻译(三)操作字符和字符串-2
- Windows via C/C++ 学习(13)作业
- Windows via C/C++ 学习(16)用户模式下的线程同步(一)
- Windows Via C/C++ 读书笔记 8 Fiber(纤程)
- C++学习笔记1(Windows程序运行原理及程序编写流程)
- Windows Via C/C++ 读书笔记 7 异步IO, 完成端口模式
- Windows via C/C++ 学习(15)线程调度、线程优先级和亲缘性
- Windows via C/C++ 学习(10)子进程
- 《Windows Via C/C++》边学习,边翻译(六)操作字符和字符串-5
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用
- 《Windows Via C/C++》边学习,边翻译(四)操作字符和字符串-3
- 《Windows Via C/C++》边学习,边翻译(五)操作字符和字符串-4
- 深入浅出Windows 10 通用应用开发学习笔记(C++) 3-1
- c++学习笔记,windows窗口模版
- Windows 8 学习笔记(二十三)--WritableBitmap的读写操作C++
- 《Windows Via C/C++》边学习,边翻译(一)错误处理(Error Handling)