多线程编程——互斥对象
来源:互联网 发布:守望先锋手机数据查询 编辑:程序博客网 时间:2024/06/05 00:25
1、windows API互斥对象
#include <windows.h>//包含头文件#include <stdio.h>DWORD WINAPI myfun1(LPVOID lpParameter);//声明线程函数DWORD WINAPI myfun2(LPVOID lpParameter);HANDLE hmutex;int a=0;//定义全局变量aint main(){hmutex=::CreateMutex(NULL,FALSE,NULL);//创建互斥对象并返回其句柄HANDLE h1,h2;//定义线程句柄h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);//创建线程1printf("线程1开始运行!\r\n");h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);//创建线程2printf("线程2开始运行!\r\n");::CloseHandle(h1);//关闭线程句柄对象::CloseHandle(h2);::Sleep(10000);//程序睡眠10秒return 0;}DWORD WINAPI myfun1(LPVOID lpParameter) //线程函数1{while(1){::WaitForSingleObject(hmutex,INFINITE);//请求互斥对象if(a<10000){a+=1;//变量自加::Sleep(1000);//线程睡眠1秒printf("线程1:%d\r\n",a);::ReleaseMutex(hmutex);//释放互斥对象句柄}else{::ReleaseMutex(hmutex);//释放互斥对象句柄break;//跳出循环}} return 0;}DWORD WINAPI myfun2(LPVOID lpParameter) //线程函数2{while(1){::WaitForSingleObject(hmutex,INFINITE);//请求互斥对象if(a<10000){a+=1;::Sleep(1000);printf("线程2:%d\r\n",a);//输出变量::ReleaseMutex(hmutex);//释放互斥对象句柄}else{::ReleaseMutex(hmutex);//释放互斥对象句柄break;//跳出循环}} return 0;//线程正常退出}
#include <afxmt.h>#include <stdio.h>DWORD WINAPI myfun1(LPVOID lpParameter);//声明线程函数DWORD WINAPI myfun2(LPVOID lpParameter);CMutex hmutex(NULL,FALSE,NULL);//定义全局互斥对象int a=0;//定义全局变量aint main(){HANDLE h1,h2;//定义线程句柄h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);//创建线程1printf("使用CMutex 类实现线程同步\r\n");printf("线程1开始运行!\r\n");h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);//创建线程2printf("线程2开始运行!\r\n");::CloseHandle(h1);//关闭线程句柄对象::CloseHandle(h2);::Sleep(10000);//程序睡眠10秒return 0;}DWORD WINAPI myfun1(LPVOID lpParameter) //线程函数1{while(1){hmutex.Lock(INFINITE);//锁定互斥对象if(a<10000){a+=1;//变量自加::Sleep(1000);//线程睡眠1秒printf("线程1:%d\r\n",a);hmutex.Unlock();//释放互斥对象}else{hmutex.Unlock();//释放互斥对象break;//跳出循环}} return 0;}DWORD WINAPI myfun2(LPVOID lpParameter) //线程函数2{while(1){hmutex.Lock(INFINITE);//锁定互斥对象if(a<10000){a+=1;::Sleep(1000);printf("线程2:%d\r\n",a);//输出变量hmutex.Unlock();//释放互斥对象}else{hmutex.Unlock();//释放互斥对象break;//跳出循环}} return 0;//线程正常退出}
3、进程间通信——互斥对象
#include<windows.h>//包含头文件#include<stdio.h>int main()//主函数{HANDLE hmutex;//定义互斥对象句柄hmutex=::CreateMutex(NULL,true,"VC网络编程");//创建互斥对象并返回其句柄if(hmutex)//判断创建互斥对象是否成功{if(ERROR_ALREADY_EXISTS==GetLastError())//获取错误{printf("只允许一个实例程序运行!\r\n");//打印相关信息}else{printf("实例程序运行成功!\r\n");}}::ReleaseMutex(hmutex);//释放互斥对象句柄::Sleep(100000);//使程序睡眠100秒return 0;//程序正常结束}
0 0
- 多线程编程——互斥对象
- 多线程编程(10) - 多线程同步之 Mutex (互斥对象)
- 多线程编程(10) - 多线程同步之 Mutex (互斥对象)
- 多线程编程(10) - 多线程同步之 Mutex (互斥对象)
- linux多线程编程——同步与互斥
- linux多线程编程——同步与互斥
- linux多线程编程——同步与互斥
- 多线程编程—线程的同步与互斥
- 多线程的互斥对象
- 多线程与互斥对象
- 多线程编程浅析(3)——多线程的互斥与同步
- 多线程编程浅析(3)——多线程的互斥与同步
- 多线程编程浅析(3)——多线程的互斥与同步
- 多线程编程(11) - 多线程同步之 Mutex (互斥对象)[续]
- 多线程编程(11) - 多线程同步之 Mutex (互斥对象)[续]
- 多线程火车票售票系统——互斥对象实现线程同步
- C#多线程学习(六) 互斥对象
- C++多线程(6)对象互斥
- 快速排序C++实现
- mybatis result maps collection already contains value
- jni编译文档(Eclipse)
- Delphi 属性多参数使用
- 由多线程内存溢出产生的实战分析
- 多线程编程——互斥对象
- 错误:Undefined symbols for architecture armv7
- 分布式锁redis实现
- HDU5762 Teacher Bo 多校联赛第三场1011
- Hibernate中通过HQL/JPQL查询的方式实现动态数据获取
- hdu5755Gambler Bo
- 基本的sql语句
- HTTP tunneling工具-端口转发
- ERROR C2514:XXX类没有构造函数