临界区_打印字符串_2线程
2017-07-07 03:43
176 查看
#include <windows.h> //包含头文件 #include <stdio.h> DWORD WINAPI myfun1(LPVOID lpParameter );//声明线程函数 DWORD WINAPI myfun2(LPVOID lpParameter ); static int a1=0; //定义全局变量并初始化 CRITICAL_SECTION Section; //定义临界区对象 int main() //主函数 { InitializeCriticalSection(&Section); //初始化临界区对象 HANDLE h1,h2; //定义线程句柄 h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL); //创建线程1 printf("线程1开始运行!\r\n"); h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL); //创建线程2 printf("线程2开始运行!\r\n"); ::CloseHandle(h1); //关闭线程句柄对象 ::CloseHandle(h2); ::Sleep(10000); //程序睡眠10秒 printf("正常退出程序请按\r\n"); while(1) { if(getchar()=='q') //如果用户输入字符q { DeleteCriticalSection(&Section); //删除临界区对象 return 0; } } } DWORD WINAPI myfun1(LPVOID lpParameter) //线程函数1 { while(1) { EnterCriticalSection(&Section); //进入临界区 a1++; //变量自加 if(a1<10000) //设置变量a1小于10000 { //::Sleep(1000); //程序睡眠1秒 printf("线程1正在计数%d\r\n",a1); LeaveCriticalSection(&Section); //离开临界区 } else //如果变量大于10000 { LeaveCriticalSection(&Section); //离开临界区 break; //跳出循环 } Sleep(2000); } return 0; } DWORD WINAPI myfun2(LPVOID lpParameter) //线程函数2 { while(1) { EnterCriticalSection(&Section); //进入临界区 a1++; if(a1<10000) { //::Sleep(1000); //程序睡眠1秒 printf("线程2正在计数%d\r\n",a1); LeaveCriticalSection(&Section); //离开临界区 } else { LeaveCriticalSection(&Section); break; } Sleep(2000); } return 0; //线程函数返回0 }
相关文章推荐
- MFC_临界区_打印字符串_2线程
- 创建线程打印字符串_2个线程打印
- 事件对象_打印字符串_2线程_同步
- 两个线程交替打印字符串
- 互斥对象_打印字符串_2线程_同步
- 多个线程按顺序循环打印线程独有的字符串
- MFC_事件对象_打印字符串_2线程_同步
- 多线程编程(二)——面试题,每个线程只打印一种字符,多个线程协同顺序打印n次字符串(求大神的其他实现方案)
- MFC_互斥对象_打印字符串_2线程_同步
- 在不同的线程中使用printf打印调试信息居然引起程序CoreDump。
- 标准库函数perror用法(打印出错误原因信息字符串)
- Linux Bash:在用户输入目录中查找含有某字符串的文件,打印行号
- 同时以十六进制和字符串方式打印缓冲区
- 十个线程写作打印4个文件的C代码实现
- 用C语言Linux下打印带颜色的字符串
- TRACE 在 Unicode下会出现String too long or IO Error打印不出字符串.
- 【转】内核打印字符串 DbgPrint
- C++打印字符串十六进制值函数
- QString 转换成普通字符串打印
- 线程访问临界区的问题 实例,需解决