线程同步分为用户模式下的线程同步和内核对象的线程同步。

 当然用户模式下的线程同步实现速度比内核模式下快,但是功能也有局

 //1.利用原子访问:  Interlocked系列函数,关于Interlocked系列函数,我需要知道的是他们,执行的极快

 //(1)首先是InterlockedExchangeAdd兄弟函数,
//第一个参数 Addend 代表进行操作数的地址,
//第二个参数 Value 代表增加的值,如果是想进行减法,传负数即可 LONG InterlockedExchangeAdd(
LONG volatile *Addend,
LONG Value ) ; LONG InterlockedExchangeAdd64(
LONG64 volatile *Addend,
LONG64 Value );
//(2)还有其它3个Interlocked函数 LONG InterlockedExchange(
LONG volatile *Target,
LONG Value ) ; LONGLONG InterlockedExchange64(
LONG64 volatile *Target,
LONG64 Value ); PVOID InterlockedExchangePointer(
PVOID volatile *Target,
PVOID Value ); //InterlockedExchange 和 InterlockedExchangePointer
//会把第一个参数所指向的内存地址的当前值,以原子方式替换为第二个参数指定的值 //(3)最后的另个Interlocked交换函数
PLONG InterlockedCompareExchange(
LONG volatile *Destination,
LONG Exchange,
LONG Comperand ) ; PLONG InterlockedCompareExchangePointer(
PVOID volatile *Destination,
PVOID Exchange,
PVOID Comperand ) ;
//函数执行的伪代码
{
if (Destination == Comperand )
{
Destination = Exchange ;
}
}
//函数会将当前值Destination与参数Comparand进行比较,如果两个值相同,
//那么函数会将*Destination 修改为Exchange,否则Destination保值不变 //实现旋转锁时,InterlockedExchange及其有用
//下面演示一下旋转锁
BOOL g_fResourceInUse = FALSE ;
void Func1()
{
//等待接收资源
while(InterlockedExchange(&g_fResourceInUse,TRUE) == TRUE )
Sleep(); //接收资源 //我们不在需要接收资源
InterlockedExchange(&g_fResourceInUse,FALSE) ;
} #include "windows.h"
#include "iostream"
using namespace std;
long g_x = ; //定义线程函数1
DWORD WINAPI ThreadFunOne(PVOID pvParam) ; //定义线程函数2
DWORD WINAPI ThreadFunTwo(PVOID pvParam); int main()
{
//创建线程1
HANDLE hThreadOne = CreateThread(NULL,,ThreadFunOne,,,NULL);
CloseHandle(hThreadOne); //创建线程2
HANDLE hThreadTwo = CreateThread(NULL,,ThreadFunTwo,,,NULL);
CloseHandle(hThreadTwo); //让主线程先挂起,确保其它线程执行完成
Sleep();
cout<<g_x<<endl;
return ;
} DWORD WINAPI ThreadFunOne(PVOID pvParam)
{
InterlockedExchangeAdd(&g_x,) ;
return ;
} DWORD WINAPI ThreadFunTwo(PVOID pvParam)
{
InterlockedExchangeAdd(&g_x,) ;
return ;
} 限性,所以我们在利用线程同步时应先考虑用户模式下的线程同步

线程同步——用户模式下线程同步——Interlocked实现线程同步的更多相关文章

  1. 线程同步——用户模式下线程同步——Slim读写锁实现线程同步

    //Slim读/写锁实现线程同步 SRWlock 的目的和关键段相同:对同一资源进行保护,不让其它线程访问. 但是,与关键段不同的是,SRWlock允许我们区分哪些想要读取资源的线程(读取者线程) 和 ...

  2. windows核心编程---第七章 用户模式下的线程同步

    用户模式下的线程同步 系统中的线程必须访问系统资源,如堆.串口.文件.窗口以及其他资源.如果一个线程独占了对某个资源的访问,其他线程就无法完成工作.我们也必须限制线程在任何时刻都能访问任何资源.比如在 ...

  3. 【windows核心编程】 第八章 用户模式下的线程同步

    Windows核心编程 第八章 用户模式下的线程同步 1. 线程之间通信发生在以下两种情况: ①    需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性 ②    一个线程需要通知其他线程 ...

  4. Windows核心编程:第8章 用户模式下的线程同步

    Github https://github.com/gongluck/Windows-Core-Program.git //第8章 用户模式下的线程同步.cpp: 定义应用程序的入口点. // #in ...

  5. 《windows核心编程系列》七谈谈用户模式下的线程同步

    用户模式下的线程同步 系统中的线程必须访问系统资源,如堆.串口.文件.窗口以及其他资源.如果一个线程独占了对某个资源的访问,其他线程就无法完成工作.我们也必须限制线程在任何时刻都能访问任何资源.比如在 ...

  6. 第8章 用户模式下的线程同步(4)_条件变量(Condition Variable)

    8.6 条件变量(Condition Variables)——可利用临界区或SRWLock锁来实现 8.6.1 条件变量的使用 (1)条件变量机制就是为了简化 “生产者-消费者”问题而设计的一种线程同 ...

  7. CentOS单用户模式下修改ROOT密码和grub加密

    Linux 系统处于正常状态时,服务器主机开机(或重新启动)后,能够由系统引导器程序自动引导 Linux 系统启动到多用户模式,并提供正常的网络服务.如果系统管理员需要进行系统维护或系统出现启动异常时 ...

  8. 在单用户模式下修改CentOS的root密码

    我们在使用CentOS的过程中可能会发生忘记root用户密码的情况,本文就从应用的角度简单介绍一下如何在单用户模式下修改root用户的密码. 开启CentOS,进入系统启动菜单 将光标停留在系统开机时 ...

  9. 设置GRUB密码以防止单用户模式下root密码被恶意更改

    在使用LInux系统的时候可能会发生忘记root密码的情况,通常管理员会进入单用户模式下进行重置root密码.那么问题来了,既然管理员可以进入单用户模式,如果恶意用户可以接触的到计算机的话毫无疑问也是 ...

随机推荐

  1. Dockerfile详解(一)

    Dockerfile 用于自动化构建一个docker镜像.Dockerfile里有 CMD 与 ENTRYPOINT 两个功能咋看起来很相似的指令,开始的时候觉得两个互用没什么所谓,但其实并非如此: ...

  2. cocosStudio制作ScrollView并在cocos2dx 3.0中使用。

    使用cocosStudio制作界面基本已成为基础了,之前都是拖动一些 Image.Button的小控件,再用到层容器和滚动层的时候,习惯性的用拖动来改变控件的大小.但是你在把其他的控件拖动到上面的时候 ...

  3. 强势龙头股的 VOLM5/35/135 走势,可作为逃顶参考

    强势龙头股的 VOLM5/35/135 走势,可作为逃顶参考

  4. python windows 安装jieba....

    用cmd进入到python安装路径,进入scripts文件夹,输出pip install jieba 安装完成提示

  5. 正则表达式中\b和\s有什么区别

    字符串:abcsdsadas abc asdsadasdabcasdsa使用\sabc\s和\babc\b都能匹配中间的abc,这种方法不是重复了么,/s是匹配空格回车等得,/b网上教程说得不清楚什么 ...

  6. 在caffe中执行脚本文件时 报错:-bash: ./train.sh: Permission denied

    报错原因:没有权限 解决方法:chmod 777 train.sh获得权限

  7. Hotfix

    http://group.jobbole.com/6311/ http://www.jianshu.com/p/6f0ae1e364d9 http://www.mamicode.com/info-de ...

  8. Debug常用命令

    R命令 查看.修改CPU中寄存器的值 -r ;查看寄存器的值 -r cs ;修改cs寄存器的值 D命令 查看内存中的内容 ;d 段地址:偏移地址 -d 1000:01 ;查看内存100001处的内容 ...

  9. Intel 80386 微处理器的存储器管理

    一.存储器的管理       存储器的管理是一种硬件机制,微处理器在总线地址上对物理存储器进行寻址.但是,为了给程序提供比物理存储器容量更大的空间,就引入了虚拟存储器的概念,它在外存(比如磁盘)的支持 ...

  10. sitecore系统教程之媒体库

    您可以管理媒体库中的所有媒体项目,例如要嵌入网页的图像或供访问者下载的图像.媒体库包含所有媒体项目,例如图像,文档,视频和音频文件. 在媒体库中,您可以: 将所有媒体文件保存在一个位置,并将其组织在与 ...