C++多线程

发布时间:2024-11-28 02:03

C++编程入门:GitHub上有许多免费的项目实战教程 #生活技巧# #工作学习技巧# #编程学习资源#

最新推荐文章于 2024-04-30 16:37:28 发布

cwl_java 于 2020-01-09 14:09:51 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。

在多线程存在的环境中,除了堆栈中的临时数据之外,所有的数据都是共享的。如果我们需要线程之间正确地运行,那么务必需要保证公共数据的执行和计算是正确的。简单一点说,就是保证数据在执行的时候必须是互斥的。否则,如果两个或者多个线程在同一时刻对数据进行了操作,那么后果是不可想象的。

也许有的朋友会说,不光数据需要保护,代码也需要保护。提出这个观点的朋友只看到了数据访问互斥的表象。在程序的运行空间里面,什么最重要的呢?代码吗?当然不是。代码只是为了数据的访问存在的。数据才是我们一切工作的出发点和落脚点。
那么,有什么办法可以保证在某一时刻只有一个线程对数据进行操作呢?四个基本方法:
(1)关中断
(2)数学互斥方法
(3)操作系统提供的互斥方法
(4)cpu原子操作
为了让大家可以对这四种方法有详细的认识,我们可以进行详细的介绍。

(1)关中断
要让数据在某一时刻只被一个线程访问,方法之一就是停止线程调度就可以了。那么怎样停止线程调度呢?那么关掉时钟中断就可以了啊。在X86里面的确存在这样的两个指令,

#include <stdio.h> int main() { __asm{ cli sti } return 1; } 123456789101112

其中cli是关中断,sti是开中断。这段代码没有什么问题,可以编过,当然也可以生成执行文件。但是在执行的时候会出现一个异常告警:Unhandled exception in test.exe:

网址:C++多线程 https://www.yuejiaxmz.com/news/view/294842

相关内容

C语言程序设计(100道编程题)
前列腺高c方法要多久
维生素C美容养颜?多吃哪些食物能补充维生素C?
以下程序的输出结果是( )。 main() int c=35; printf
C++ 黑客编程揭秘与防范(第2版)【全本
设intc=5和inta;a=2+(c+=c++,c+8,++c),则a=()
有谁懂得把它修改成最佳公式买线:=EMA(C,2);卖线:=EM 爱问知识人
如果三条线段的长a、b、c满足ba=cb=5
一道数学求值题若a,b,c是两两不相等实数,其中a是b和c的等比中项,b是a和c的等差中项,则(a/b)+(c/a)=?请写出推导过程
经典c程序(0023)

随便看看