并发和同步

1.并发指多个控制流同时在执行,即可能是真正的并发执行,也可能是分时的并发执行,同步则是保证在并发执行的环境中各个控制流可以有效执行,包括对资源的共享或互斥访问,以及代码功能逻辑循序。


2.为了保护对一个内存单元操作,我们必须使该操作称为一个院子操作。Intel x86 指令体系中,有些运算指令加上lock就可以保证其原子性。如add,adc,and btc,bts 等等。windows充分利用了这些原子指令来实现一些基本的数据保护。

wrk中 InterlockedIncrement中

LONG
FASTCALL
InterlockedIncrement(
IN OUT LONG volatile* Addend
)
{
	__asm
	{
		mov eax,1
		mov ecx,Addend
		lock xadd [ecx],eax
		inc eax
	}
}

如果另一个线程往Addend内存单元赋值100,则此赋值要么在加一前完成,要么在加1后完成


3.自旋锁在单处理器系统上没有任何意义,它仅使用于多处理器系统。自旋锁是一种特殊的锁,也有两个操作:Lock和Unlock。一个线程为了获得自旋锁,会占住处理器不放,并且不停的旋转,即空耗处理器,从自旋锁的逻辑来考虑,一定存在另一个处理器正在使用该锁保护的对象,当一个处理器上的线程在等待自旋锁时,一定存在另一个处理器正在使用该锁保护的对象,并且可以期望该处理器很快释放该锁


4.windows总是运行在一个高并发的环境中,任何时候,每个处理器都运行在某一个IRQL上。处理器把被中断的线程的状态保持起来,然后调用IDT设定中断例程。每个处理器的IRQL决定了它如何处理中断。


5.DISPATCH_LEVEL是高的软件中断IRQL,它低于所有硬件中断的IRQL。


6.中断对象是Windows提供的一种中断扩展机制,它允许设备驱动程序将一个中断服务例程与某一个特定的中断向量关联起来。



7.执行体资源对象位于非换页内存池,它本质上实现了一个读写锁。当内核代码访问一个资源时,可以申请以共享方式访问的资源;当需要写访问该资源时,则必须申请独占方式的访问.

总结:当放生竞争时,共享请求和独占请求都要等到。当执行体资源对象被释放时,选择下一步该满足哪个或哪些请求算法如下:
1.若独占方式的线程释放一个执行体资源对象,则首先满足共享请求,如果没有共享请求,则满足独占请求;
2.若共享方式的线程释放一个执行体资源对象,则只考虑是否有独占请求,如果有,则满足之。如果没有独占请求在等待,那么一定不会有共享请求在等待。












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值