多线程编程——互斥对象

来源:互联网 发布:守望先锋手机数据查询 编辑:程序博客网 时间: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;//线程正常退出}


2、MFC互斥对象

#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
原创粉丝点击