windows C++多线程同步<3>-互斥量

这篇具有很好参考价值的文章主要介绍了windows C++多线程同步<3>-互斥量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

windows C++多线程同步<3>-互斥量

概念,如下图:
windows C++多线程同步<3>-互斥量,【MFC】,【Windows核心编程】,【道阻且长C++】,c++,开发语言另外就是互斥对象谁拥有,谁释放

那么一个线程允许多次获取互斥对象吗?
答案是允许,但是申请多次就要释放多次,否则其他线程获取不到互斥对象;同一个线程可以多次获取,即使不释放也可以,但是这种做法有问题极易导致线程同步出现异常,强烈不建议使用;
互斥对象和事件对象两者都是内核对象,使用方法也几乎相同;

常用API

WaitForSingleObject(g_cs , INFINITE);
获取互斥对象

ReleaseMutex(g_cs);
释放互斥对象
文章来源地址https://www.toymoban.com/news/detail-619311.html

#include<iostream>
#include<Windows.h>
using namespace std;

HANDLE g_cs;
int ticks =100;
DWORD WINAPI Func1(LPVOID lpParameter)
{
	while(true)
	{
		WaitForSingleObject(g_cs , INFINITE);
		if(ticks>0)
		{
			cout<<"thread1 "<<ticks<<endl;
			ticks--;
			ReleaseMutex(g_cs);
		}
		else
		{
			ReleaseMutex(g_cs);
			break;
		}
	}

	return 0;
}
DWORD WINAPI Func2(LPVOID lpParameter)
{
	while(true)
	{
		WaitForSingleObject(g_cs , INFINITE);

		if(ticks>0)
		{
			cout<<"thread2 "<<ticks<<endl;
			ticks--;
			ReleaseMutex(g_cs);
		}
		else
		{
			ReleaseMutex(g_cs);
			break;
		}
	}
	return 0;
}

int main()
{
	g_cs = CreateMutex(NULL,FALSE , NULL);
	HANDLE hThread1;
	HANDLE hThread2;
	hThread1 = CreateThread(NULL , 0 ,Func1,NULL,0,NULL);
	hThread1 = CreateThread(NULL , 0 ,Func2,NULL,0,NULL);
	Sleep(2000);
	return 0;
}




到了这里,关于windows C++多线程同步<3>-互斥量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Windows线程开发】Windows线程同步技术

    我们在上一章节中讲解了关于Windows的线程基础,相信大家已经对线程有了基本的概念。这一章节中,我们来讲讲线程同步技术,包括加锁技术(原子锁和互斥体)和事件,信号量。 原子锁主要解决的问题是多线程在操作符方面的问题。 相关问题: 多个线程对同一个数据进行

    2024年02月04日
    浏览(55)
  • Linux——线程3|线程互斥和同步

    我们上一篇提到过,多个线程执行下面代码可能会出错,具体原因可查看上一篇Linux博客。 为避免这种错误的出现,我们可采用加锁保护。 PTHREAD_MUTEX_INITIALIZER 用pthread_mutex_t定义一把锁。ptherad_mutex_init是对锁进行初始化的函数。如果这把锁是全局的并且是静态定义的,我们可

    2024年02月05日
    浏览(48)
  • Windows查看核心与线程数

    查询电脑硬件CPU信息命令的学习,予以记录! 参考博客:https://blog.csdn.net/huazicomeon/article/details/53540852 Ctrl + Shift + Esc打开任务管理器,选择性能查看相应CPU核数与线程数 Win + S打开搜索,输入计算机管理,进入设备管理器,处理器,可以看出来多少个线程 链接:CPU-Z_2.08-CN.e

    2024年02月08日
    浏览(31)
  • 【Linux】线程同步和互斥

    1.临界资源:多线程执行流共享的资源,且一次只能允许一个执行流访问的资源就叫做临界资源。(多线程、多进程打印数据) 2.临界区:每个线程内部,访问临界资源的代码,就叫做临界区。 3.互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对

    2024年02月08日
    浏览(46)
  • 线程同步与互斥

    目录 前言:基于多线程不安全并行抢票 一、线程互斥锁 mutex 1.1 加锁解锁处理多线程并发  1.2 如何看待锁 1.3 如何理解加锁解锁的本质 1.4 C++RAII方格设计封装锁 前言:基于线程安全的不合理竞争资源 二、线程同步 1.1 线程同步处理抢票 1.2 如何理解\\\"条件变量\\\" 1.3 如何理解条

    2024年02月10日
    浏览(34)
  • Linux和windows进程同步与线程同步那些事儿(三): Linux线程同步详解示例

    Linux和windows进程同步与线程同步那些事儿(一) Linux和windows进程同步与线程同步那些事儿(二): windows线程同步详解示例 Linux和windows进程同步与线程同步那些事儿(三): Linux线程同步详解示例 Linux和windows进程同步与线程同步那些事儿(四):windows 下进程同步 Linux和wi

    2024年02月01日
    浏览(39)
  • 线程的同步和互斥学习笔记

    目录 互斥锁的概念和使用  线程通信-互斥  互斥锁的创建和销毁  申请锁-pthread_mutex_lock  释放锁-pthread_mutex_unlock 读写锁的概念和使用 死锁的避免 线程通信-互斥 临界资源 一次只允许一个任务(进程、线程)访问的共享资源 概念:         不能同时访问的资源,比如写

    2024年01月25日
    浏览(36)
  • Linux——线程的同步与互斥

    目录 模拟抢火车票的过程 代码示例 thread.cc Thread.hpp 运行结果 分析原因 tickets减到-2的本质  解决抢票出错的方案 临界资源的概念 原子性的概念 加锁 定义 初始化 销毁 代码形式如下 代码示例1: 代码示例2: 总结 如何看待锁 申请失败将会阻塞  pthread_mutex_tyrlock 互斥锁实现

    2024年02月06日
    浏览(43)
  • Linux——多线程,互斥与同步

    目录 一.linux互斥 1.进程线程间的互斥相关背景概念 2.互斥量mutex 3.加锁互斥锁mutex 4.锁的底层原理  二.可重入VS线程安全 1.概念 2.常见的线程不安全的情况 3.常见的线程安全的情况  4.常见不可重入的情况  5..常见可重入的情况 6.可重入与线程安全联系  三.死锁 1.死锁四个必

    2024年02月05日
    浏览(34)
  • 【Linux】多线程互斥与同步

    互斥 指的是一种机制,用于确保在同一时刻只有一个进程或线程能够访问共享资源或执行临界区代码。 互斥的目的是 防止多个并发执行的进程或线程访问共享资源时产生竞争条件,从而保证数据的一致性和正确性 ,下面我们来使用多线程来模拟实现一个抢票的场景,看看所

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包