win32 多线程基础

// MultiThead.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<windows.h>
#include<iostream>
using namespace std;

DWORD WINAPI Fun1Proc(
					  LPVOID lpParameter	//thread data

					  );

DWORD WINAPI Fun2Proc(
					  LPVOID lpParameter	//thread data

					  );
int index=0;
int tickets=100;
HANDLE hMutex;

int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE hThread1;
	HANDLE hThread2;
	hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
	hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
	CloseHandle(hThread1);
	CloseHandle(hThread2);

	//while(index++<=100)
	//cout<<"main thread is running\n"<<endl;
	//Sleep(100);
	//getchar();
	//hMutex=CreateMutex(NULL,FALSE,NULL);

	hMutex=CreateMutex(NULL,TRUE,"tickets");
	if(hMutex)//单例模式
	{
		if(ERROR_ALREADY_EXISTS==GetLastError())//看这个互斥对象是否已经创建出来了
		{
			cout<<"only instance can run!!!"<<endl;
			return 0;
		}
	}

	WaitForSingleObject(hMutex,INFINITE);
	ReleaseMutex(hMutex);
	ReleaseMutex(hMutex);
    Sleep(4000);//主线程放弃了执行时间

	system("pause");
	return 0;
}

DWORD WINAPI Fun1Proc(
	LPVOID lpParameter	//thread data

					  )
{
	/*
	while(index++<=100)
	cout<<"thread1 is running"<<endl;
	return 0;

	while(true)
	{
		WaitForSingleObject(hMutex,INFINITE);//有信号状态,
		if(tickets>0)
		{
			cout<<"thread1 sell ticket :"<<tickets--<<endl;

		}
		else
			break;
		ReleaseMutex(hMutex);//好像是可以自动释放的
	}
	*/

	WaitForSingleObject(hMutex,INFINITE);
	cout<<"thread1 is running"<<endl;
	return 0;
}
DWORD WINAPI Fun2Proc(
	LPVOID lpParameter	//thread data

					  )
{
	/*
	while(index++<=100)
	cout<<"thread2 is running"<<endl;
	return 0;

	while(true)
	{
		WaitForSingleObject(hMutex,INFINITE);
		if(tickets>0)
		{
			cout<<"thread2 sell ticket :"<<tickets--<<endl;

		}
		else
			break;
		ReleaseMutex(hMutex);
	}
	*/
	WaitForSingleObject(hMutex,INFINITE);
	cout<<"thread2 is running"<<endl;
	return 0;
}

但是不知道,为啥,结果和孙鑫视频里的结果不一样。

时间: 2024-09-09 21:02:48

win32 多线程基础的相关文章

Win32 多线程的创建方法和基本使用 .

Summary: 总结Win32提供的创建多线程相关的API接口和基本的使用框架. Ref: MSDN: http://msdn.microsoft.com/zh-cn/library/y6h8hye8(v=VS.100) Win32多线程的创建方法主要有: (1)CreateThread() (2)_beginthread()&&_beginthreadex() (3)AfxBeginThread() (4)CWinThread类 (1)CreateThread() 百度百科:http:

Java多线程基础总结七:ReentrantLock

之前总结了部分无锁机制的多线程基础,理想的状态当然是利用无锁同步解决多线程程序设计的问题.但是实际碰到的问题使得很多情 况下,我们不得不借助锁同步来保证线程安全.自从JDK5开始,有两种机制来屏蔽代码块在并行访问的干扰,synchronized关键字已经介绍 过了部分内容,所以这次简单的说说另一种锁机制:ReentrantLock. 对于synchronized的缺点之前也简单的说了一些,实际使用中比较烦扰的几点是:a.只有一个"条件"与锁相关联,这对于大量并发线程 的情况是很难管理(

深入浅出Win32多线程程序设计之基本概念

一.深入浅出Win32多线程程序设计之基本概念[转] 引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档. 理解多线程及其同步.互斥等通信方式是理解现代操作系统的关键一环,当我们精通了Win32多线程程序设计后,理解和学习其它操作系统的多任务控制也非常容易.许多程序员从来没有学习过嵌入式系统领域著名的操作系统Vx

《win32多线程程序设计》随笔1

近日,因为即将离开目前的工作单位,处于工作交接的阶段,工作不太忙. 又因朋友给介绍了一家公司,做多线程方面的研发,问及我对多线程了解的程度,我坦诚的说了解的不多. 这就使我有了机会去接触这本书--<win32多线程程序设计>.当时只是打算随便找本书补一下自己在这个方面知识的缺陷,当看到这本书的译者是侯捷老师的时候,我就知道这本书一定是本好书. 这些天用了些零碎的时间把这本书的前4章看了下,有一些小体会,记录下来,留给自己总结提高,如果能对别人有帮助,那是再好不过了. 近几个月一直在埋头写程序和

WIN32 多线程程序设计一书中有如下部分。

问题描述 WIN32 多线程程序设计一书中有如下部分. 问下这样的程序为什么会产生死锁? 当线程A 执行InitializeCriticalSection(list1->critical_sec):之后线程B怎么还可能执行 InitializeCriticalSection(list2->critical_sec): 这段不是早就被A给锁住了吗? void SwapLists(List *list, List *list2) { List *tmp_list; EnterCriticalSec

多线程基础(一)基础中的基础

多线程基础: 先上个以下关于进程.线程和任务的基本的概念的概括图:     进程:      系统中正在运行的一个应用程序(一种状态).      每个进程之间是相互独立的,每个进程在其受保护专用的内存空间内.   线程:      一个进程要想执行任务,必须要有线程(每个进程至少有一条线程)      一个进程所有的任务都是在线程中执行的.   线程的串行      一个线程中的任务的执行是串行的      如果在一个线程中执行多个任务,那么只能一个一个按顺序执行这些任务      同一个时间

多线程基础(五)NSThread线程通信

5.多线程基础 线程间通信 什么叫线程间通信 在一个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另一个线程 在1个线程中执行完特定任务后, 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法 perform执行 selector选择器 - (void)performSelectorOnMainThread:(SEL)aSelectorwithObject:(id)arg

深入浅出Win32多线程程序设计-【1】基本概念

  引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档. 理解多线程及其同步.互斥等通信方式是理解现代操作系统的关键一环,当我们精通了Win32多线程程序设计后,理解和学习其它操作系统的多任务控制也非常容易.许多程序员从来没有学习过嵌入式系统领域著名的操作系统VxWorks,但是立马就能在上面做开发,大概要归功于

深入浅出Win32多线程程序设计-【3】线程通信

  简介 线程之间通信的两个基本问题是互斥和同步. 线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒. 线程互斥是指对于共享的操作系统资源(指的是广义的"资源",而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访问时的排它性.当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源. 线程互斥是一种