多线程同步之Mutex(互斥对象)
来源:互联网 发布:义乌淘宝培训学校排名 编辑:程序博客网 时间:2024/05/22 03:17
//多线程同步
//互斥对象的应用
#define WIN32_LEAN_AND_MEAN
#include <STDIO.H>
#include <stdlib.h>
#include <WINDOWS.H>
HANDLE hThread1,hThread2;//线程句柄1,线程句柄2
DWORD ExitCode1,ExitCode2;//线程1退出码,线程2退出码
DWORD ThreadId1,ThreadId2;//线程1的ID,线程2的ID
//① 定义互斥对象句柄
HANDLE Mutex1,Mutex2;//互斥对象1,互斥对象2
int parameter1=0,parameter2=0;//参数1,参数2
DWORD WINAPI ThreadFunc(LPVOID);//线程函数
int main()
{
//②创建互斥对象
Mutex1 = CreateMutex(
NULL, //默认安全属性
FALSE, //创建线程不拥有这个互斥对象
"SynMutex1" //线程名
);
Mutex2 = CreateMutex(NULL,FALSE,"SynMutex2");
hThread1 = CreateThread(NULL,0,ThreadFunc,(LPVOID)1,NULL,&ThreadId1);
hThread2 = CreateThread(NULL,0,ThreadFunc,(LPVOID)2,NULL,&ThreadId2);
Sleep(2000);//等待线程执行完毕
GetExitCodeThread(hThread1,&ExitCode1);
GetExitCodeThread(hThread2,&ExitCode2);
printf("线程1退出码:%ld=====线程2退出码:%ld\n",ExitCode1,ExitCode2);
printf("线程1的ID :%ld=====线程2的ID :%ld\n",ThreadId1,ThreadId2);
ReleaseMutex(Mutex1);
ReleaseMutex(Mutex2);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(Mutex1);
CloseHandle(Mutex2);
return 0;
}
DWORD WINAPI ThreadFunc(LPVOID n)
{
//说明
//重新设定一个HANDLE数组
//数组赋值应为要获得与互斥数据绑定的互斥句柄
//一个句柄绑定一个数据或一组数据
//③创建互斥对象等待副本
HANDLE Mutexes[2];
//④给副本赋值
Mutexes[0] = Mutex1;
Mutexes[1] = Mutex2;
//⑤等待两个对象全部激活
WaitForMultipleObjects(
2, //要等待的是两个对象
Mutexes, //要等待的互斥对象数组
TRUE, //等待全部
INFINITE //一直等待
);
printf("线程%d开始.......\n",(int)n);
printf("parameter1 = parameter1 + 1 * n\n");
printf("%d = %d + %d\n",(parameter1+1*(int)n),parameter1,1*(int)n);
printf("parameter2 = parameter2 + 2 * n\n");
printf("%d = %d + %d\n",(parameter2+2*(int)n),parameter2,2*(int)n);
parameter1 += (int)n*1;
parameter2 += (int)n*2;
printf("线程%d的计算结果%d,%d\n\n",(int)n,parameter1,parameter2);
//⑥ 副本互斥对象句柄释放
ReleaseMutex(Mutexes[0]);
ReleaseMutex(Mutexes[1]);
CloseHandle(Mutexes[0]);//释放
CloseHandle(Mutexes[1]);
return (int)n;
}
- 多线程同步之Mutex(互斥对象)
- 多线程编程(10) - 多线程同步之 Mutex (互斥对象)
- 多线程编程(10) - 多线程同步之 Mutex (互斥对象)
- 多线程编程(10) - 多线程同步之 Mutex (互斥对象)
- 多线程同步-互斥对象(深入理解Mutex)
- C++多线程同步(采用互斥对象Mutex)
- 多线程编程(11) - 多线程同步之 Mutex (互斥对象)[续]
- 多线程编程(11) - 多线程同步之 Mutex (互斥对象)[续]
- .NET多线程同步方法详解(四):系统内核对象 互斥对象(Mutex)
- NET多线程同步方法详解(四):系统内核对象 互斥对象(Mutex)
- 多线程同步之互斥对象
- 多线程同步之互斥对象
- 线程同步互斥之互斥量(Mutex)
- 线程同步互斥之互斥量(Mutex)
- 多线程互斥--mutex
- 互斥对象 Mutex
- 互斥对象mutex
- Linux操作系统多线程同步互斥Mutex的使用
- 传谷歌微软争夺频率资源欲建设免费Wi-Fi网络
- 只要自己亲手去做,没有成功或失败。
- java在控台体输出0~9
- LightOJ 1221 - Travel Company(SPFA判负环)
- Python数据抓取(抓图片)
- 多线程同步之Mutex(互斥对象)
- Spatialite for Android编译及测试
- IT外企那些事儿
- Google Code项目Git版本控制
- 让我吐槽会
- (vim+ctags+taglist +cscope):(ubuntu 10.10下安装Ctags与TAGLISTS插件)
- 用Intent启动Activity,并在Activity之间传递数据
- WinDiff 使用
- 使用jquery写一个热键(J/K)动态滚动浏览插件