【多线程】C++ 互斥锁(mutex)的简单原理分析
2021/7/13 22:08:45
本文主要是介绍【多线程】C++ 互斥锁(mutex)的简单原理分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,分为两种类型的多任务处理:基于进程和基于线程。
1)基于进程的多任务处理是程序的并发执行。
2)基于线程的多任务处理是同一程序的片段的并发执行。
多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。比如说,同一个文件,可能一个线程会对其进行写操作,而另一个线程需要对这个文件进行读操作,可想而知,如果写线程还没有写结束,而此时读线程开始了,或者读线程还没有读结束而写线程开始了,那么最终的结果显然会是混乱的。为了保护共享资源,在线程里也有这么一把锁——互斥锁(mutex),互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁( lock )和解锁( unlock )。
一、创建线程
在Windows下用C++创建线程需要导入windows.h头文件,同时调用CreateThread()函数。如下:
#include <windows.h> HANDLE thread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
参数说明:
1)In_opt:LPSECURITY_ATTRIBUTES lpThreadAttributes, {安全设置}
2)In SIZE_T:dwStackSize, {堆栈大小}
3)In LPTHREAD_START_ROUTINE:lpStartAddress, {入口函数}
4)In_opt __drv_aliasesMem LPVOID:lpParameter, {函数参数}
5)In DWORD:dwCreationFlags, {启动选项}
6)Out_opt LPDWORD:lpThreadId {输出线程id}
返回值:线程句柄 ,"句柄" 类似指针,但通过指针可读写对象,通过句柄只是使用对象;有句柄的对象一般都是系统级别的对象(或叫内核对象)。
二、创建互斥量
这篇关于【多线程】C++ 互斥锁(mutex)的简单原理分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升