`

线程互斥共享资源

    博客分类:
  • C++
阅读更多
#include <windows.h>
#include <iostream.h>
DWORD WINAPI ThreadProc1(LPVOID lpParameter);
DWORD WINAPI ThreadProc2(LPVOID lpParameter);
int tickets=100;
HANDLE hMutex;
void main(){
	HANDLE handle1;	
	HANDLE handle2;

	handle1=CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
	handle2=CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
	CloseHandle(handle1);
	CloseHandle(handle2);
	hMutex=CreateMutex(NULL,false,NULL);
	Sleep(4000);
	//CloseHandle(hMutex);
}

DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
	while(true){
		WaitForSingleObject(hMutex,INFINITE);
		if (tickets>0)
		{
			cout<<"Thread1 sell:"<<tickets--<<endl;
		} 
		else
		{
			break;
		}
		ReleaseMutex(hMutex);
	}
	return 0;
}

DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{
	while(tickets>0){
		WaitForSingleObject(hMutex,INFINITE);
		if (tickets>0)
		{
			cout<<"Thread2 sell:"<<tickets--<<endl;
		} 
		else
		{
			break;
		}
		ReleaseMutex(hMutex);
	}
	return 0;
}

/*
	HANDLE hMutex;
	//在主线程创建互斥对象
	hMutex=CreateMutex(NULL,false,NULL);
	//在分线程里请求互斥对象
	WaitForSingleObject(hMutex,INFINITE);
	//在分线程里释放互斥对象
	ReleaseMutex(hMutex);
*/
分享到:
评论

相关推荐

    易语言线程互斥对象解决

    线程互斥对象允许我们限制对共享资源的访问,防止多个线程同时访问同一资源,从而避免数据竞争和不一致状态。 1. **线程互斥对象(Mutex)**: 线程互斥对象是一种同步机制,当一个线程获得了Mutex的所有权后,...

    vc++中使用临界区CriticalSection来多线程互斥使用资源

    为了解决这个问题,开发者可以使用临界区(CriticalSection)机制来实现线程互斥,确保同一时间只有一个线程能访问特定的共享资源。本文将深入探讨VC++中临界区的使用方法,并通过一个例子进行说明。 临界区是一种...

    C#多线程互斥实例 多线程获取同一变量

    在这个"多线程互斥实例 多线程获取同一变量"的示例中,我们将探讨如何在多个线程中安全地访问共享资源,避免数据不一致性和竞态条件。 首先,我们需要理解多线程中的一些核心概念: 1. **线程**:线程是操作系统...

    多线程的小例子,线程互斥的问题

    线程互斥是多线程编程中的一个关键概念,用于确保在特定时间内,只有一个线程可以访问共享资源,以防止数据不一致性和竞态条件。在C#中,我们可以使用`System.Threading`命名空间下的类来实现线程同步和互斥。 1. *...

    线程间互斥2

    为了保证数据的一致性和完整性,避免竞态条件(race condition)的发生,就需要采取线程互斥机制来控制对共享资源的访问。 线程互斥的基本思想是,当一个线程正在访问共享资源时,其他试图访问该资源的线程会被阻塞...

    操作系统实验(三)线程的互斥

    本实验旨在让学生通过实践操作深入了解和掌握在Windows系统环境下线程的创建与撤销的方法,熟悉并使用Windows系统提供的线程互斥API来解决多线程访问共享资源时产生的竞态条件问题。 #### 实验准备知识 为了实现...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    - **Monitor类**:提供了一种线程互斥机制,通过`Monitor.Enter`和`Monitor.Exit`方法实现对共享资源的锁定,确保同一时间只有一个线程访问。 - **Mutex类**:全局范围的互斥锁,可以跨进程使用,确保同一时间只有...

    线程 互斥.rar案例

    线程互斥是多线程编程中的一个关键概念,它涉及到如何在并发环境中确保资源的安全访问,以防止数据不一致性和竞态条件的发生。在这个"线程 互斥.rar"案例中,我们很可能会探讨如何在编程中实现线程间的互斥机制,以...

    第20章 Part3 多线程互斥与协作.pdf

    ### 第20章 Part3:多线程互斥与协作 #### 一、互斥(Mutual Exclusion) 互斥是指在线程编程中确保多个线程不会同时访问同一资源的技术。这种技术非常重要,因为如果不加以控制,多个线程对共享资源的并发访问...

    C# 多线程互斥 两个线程交替工作

    在C#编程中,多线程是实现并发执行任务的关键技术。...总的来说,C#中的多线程互斥是通过各种同步机制来保证线程安全和顺序执行。合理使用这些机制,能有效地实现两个线程交替工作,从而提高程序的并发处理能力。

    线程互斥测试

    在多线程编程中,线程互斥是一种重要的同步机制,用于确保同一时间只有一个线程访问特定的资源或代码段,防止数据竞争和不一致性。MFC(Microsoft Foundation Classes)库为Windows应用程序提供了线程支持,并包含了...

    linux上实现多进程和多线程实现同步互斥(源代码)

    多线程则是在一个进程中创建多个执行流,它们共享同一块内存空间,资源利用率高,但数据同步和互斥问题更复杂。在Linux中,可以使用`pthread_create()`创建线程,`pthread_join()`等待线程结束。线程间的同步互斥...

    多线程互斥锁和条件变量demo

    互斥锁,全称为互斥量,是一种同步机制,用于保护共享资源免受并发访问的影响。当一个线程获取了互斥锁后,其他试图获取该锁的线程将被阻塞,直到持有锁的线程释放锁。这样,同一时间只有一个线程能够访问受保护的...

    线程互斥锁

    线程互斥锁是多线程编程中一个关键的概念,用于保证共享资源在同一时刻只被一个线程访问,从而避免数据竞争和不一致性的发生。在Windows和Linux这两种操作系统环境下,实现线程互斥锁的方法有所不同,但目标都是为了...

    线程互斥--多线程学习

    线程互斥是多线程编程中确保资源安全共享的关键机制,防止多个线程同时访问同一共享资源,从而避免数据不一致性和竞态条件。 线程互斥主要通过以下几种方式实现: 1. **锁**:最常见的是互斥锁(Mutex),它只允许...

    线程互斥(模拟计算机)

    线程互斥是多线程编程中的一个关键概念,它涉及到如何在多个并发执行的线程之间保护共享资源,以防止数据竞争和其他并发异常。在这个名为"线程互斥(模拟计算机)"的系统中,使用了CMUTEX互斥对象来解决生产者和消费者...

    实例讲述线程的同步互斥

    然而,当多个线程访问共享资源时,如果不加以控制,可能会引发数据竞争和死锁等问题。 **线程同步** 是一种机制,它强制线程按照一定的顺序执行,避免多个线程同时访问同一资源,防止数据不一致。在Java中,可以...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)完整源码

    4. **线程互斥**:线程互斥是防止多个线程同时访问共享资源的技术。实例可能包含了对`lock`关键字的使用,它可以围绕临界区创建一个同步块,确保一次只有一个线程能执行这段代码。 5. **线程池**:线程池是.NET框架...

    C# 多线程的同步与互斥(使用Mutex和Event)

    Mutex(互斥锁)是一种高级同步机制,它允许只有一个线程访问共享资源,确保同一时间只有一个线程执行特定代码段。在C#中,Mutex类提供了WaitOne()和ReleaseMutex()方法,前者用于获取锁,后者用于释放锁。如果一个...

Global site tag (gtag.js) - Google Analytics