Windows核心编程第八章用户方式线程同步(下)中,如何实现线程同步机制?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4904个文字,预计阅读时间需要20分钟。
8.4 关键代码段:关键代码段是指一个小代码块,在执行前必须独占对某些共享资源的访问权限。这是一种使代码能以原子操作方式使用资源的方法。所谓原子,即不可分割的操作。
8.4 关键代码段
关键代码段是指一个小代码段,在代码能够执行前,它必须独占对某些共享资源的访问权。这是让若干行代码能够“以原子操作方式”来使用资源的一种方法。所谓原子操作方式,是指该代码知道没有别的线程要访问该资源。当然,系统仍然能够抑制你的线程的运行,而抢先安排其他线程的运行。不过,在线程退出关键代码段之前,系统将不给想要访问相同资源的其他任何线程进行调度。
下面是个有问题的代码,它显示了不使用关键代码段会发生什么情况:
如果分开来看,这两个线程函数将会产生相同的结果,不过每个函数的编码略有不同。如果F i r s t T h r e a d函数自行运行,它将用递增的值填入 g _ d w Ti m e s数组。如果S e c o n d T h r e a d函数也是自行运行,那么情况也一样。在理想的情况下,我们希望两个线程能够同时运行,并且仍然使g _ d w Ti m e s数组能够产生递增的值。但是,上面的代码存在一个问题,那就是 g _ d w Ti m e s不会被正确地填入数据,因为两个线程函数要同时访问相同的全局变量。
下面是如何出现这种情况的一个例子。比如说,我们刚刚在只有一个 C P U的系统上启动执行两个线程。操作系统首先启动运行 S e c o n d T h r e a d(这种情况很可能出现) ,当S e c o n d T h r e a d将g _ n I n d e x递增为1之后,系统就停止该线程的运行,而让F i r s t T h r e a d运行。
本文共计4904个文字,预计阅读时间需要20分钟。
8.4 关键代码段:关键代码段是指一个小代码块,在执行前必须独占对某些共享资源的访问权限。这是一种使代码能以原子操作方式使用资源的方法。所谓原子,即不可分割的操作。
8.4 关键代码段
关键代码段是指一个小代码段,在代码能够执行前,它必须独占对某些共享资源的访问权。这是让若干行代码能够“以原子操作方式”来使用资源的一种方法。所谓原子操作方式,是指该代码知道没有别的线程要访问该资源。当然,系统仍然能够抑制你的线程的运行,而抢先安排其他线程的运行。不过,在线程退出关键代码段之前,系统将不给想要访问相同资源的其他任何线程进行调度。
下面是个有问题的代码,它显示了不使用关键代码段会发生什么情况:
如果分开来看,这两个线程函数将会产生相同的结果,不过每个函数的编码略有不同。如果F i r s t T h r e a d函数自行运行,它将用递增的值填入 g _ d w Ti m e s数组。如果S e c o n d T h r e a d函数也是自行运行,那么情况也一样。在理想的情况下,我们希望两个线程能够同时运行,并且仍然使g _ d w Ti m e s数组能够产生递增的值。但是,上面的代码存在一个问题,那就是 g _ d w Ti m e s不会被正确地填入数据,因为两个线程函数要同时访问相同的全局变量。
下面是如何出现这种情况的一个例子。比如说,我们刚刚在只有一个 C P U的系统上启动执行两个线程。操作系统首先启动运行 S e c o n d T h r e a d(这种情况很可能出现) ,当S e c o n d T h r e a d将g _ n I n d e x递增为1之后,系统就停止该线程的运行,而让F i r s t T h r e a d运行。

