标签:printf oid windows ada ica argv space obj color
个人感觉这临界区相当于java 中的sy 关键字那种 相当于重度锁吧 加锁之后 只允许本线程读写 其他线程读都不能 效率有点低
类似于 你上厕所锁门 别人就进不来 其他人想要使用时没法使用等你出来了才可以使用
下面是一段伪代码 如果不出错的话应该输出4000
#include <iostream> #include<windows.h> using namespace std; CRITICAL_SECTION ics; int icount=0; DWORD WINAPI ThreadA(LPVOID lp) { for(int i=0;i<1000 ;i++ ) { // EnterCriticalSection(&ics); Sleep(1); icount++; // LeaveCriticalSection(&ics); } return 0; } DWORD WINAPI ThreadB(LPVOID lp) { for(int i=0;i<1000 ;i++ ) { // EnterCriticalSection(&ics); Sleep(1); icount++; // LeaveCriticalSection(&ics); } return 0; } DWORD WINAPI ThreadC(LPVOID lp) { for(int i=0;i<1000 ;i++ ) { // EnterCriticalSection(&ics); Sleep(1); icount++; // LeaveCriticalSection(&ics); } return 0; } DWORD WINAPI ThreadD(LPVOID lp) { for(int i=0;i<1000 ;i++ ) { // EnterCriticalSection(&ics); Sleep(1); icount++; // LeaveCriticalSection(&ics); } return 0; } int main(int argc, char *argv[]) { InitializeCriticalSection(&ics); HANDLE ha=CreateThread(NULL,0,ThreadA,NULL,0,NULL); HANDLE hb=CreateThread(NULL,0,ThreadB,NULL,0,NULL); HANDLE hC=CreateThread(NULL,0,ThreadC,NULL,0,NULL); HANDLE hD=CreateThread(NULL,0,ThreadD,NULL,0,NULL); ::WaitForSingleObject(ha,INFINITE); ::WaitForSingleObject(hb,INFINITE); ::WaitForSingleObject(hC,INFINITE); ::WaitForSingleObject(hD,INFINITE); printf("%d",icount); return 0; }
标签:printf oid windows ada ica argv space obj color
原文地址:https://www.cnblogs.com/xuexidememeda/p/12653096.html