您的位置:首页 > 编程语言

多线程编程Demo[利用互斥对象实现线程间同步]

2011-06-15 12:14 681 查看
/* 本实例示范使用互斥对象实现线程间同步[互斥对象属于内核对象 */
/* 它可以实现在不同的进程的不同线程间的同步,				 */
/* 可以将本exe程序复制不同名字的文件然后运行,				 */
/* 会发现即使重命名文件仍然不能同时运行多个exe]				 */

#include <stdio.h>
#include <windows.h>

DWORD WINAPI Fun1Proc(
LPVOID lpParameter   // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter   // thread data
);
HANDLE hMutex = NULL;
int tickets = 100;
void main()
{
HANDLE hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
HANDLE hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
hMutex = CreateMutex(NULL,false,"multiThread");
if (hMutex && ERROR_ALREADY_EXISTS==GetLastError())
{
printf("only one instance can running/n");
return;
}

Sleep(5000);

CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hMutex);
}

DWORD WINAPI Fun1Proc(
LPVOID lpParameter   // thread data
)
{
while (TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if (tickets==0)
{
break;
}
Sleep(1);
printf("Thread1 sell ticket: %d/n",tickets--);
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter   // thread data
)
{
while (tickets>0)
{
WaitForSingleObject(hMutex,INFINITE);
if (tickets==0)
{
break;
}
Sleep(1);
printf("Thread2 sell ticket: %d/n",tickets--);
ReleaseMutex(hMutex);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: