对于线程重入,在C#中有lock关键字锁住一个SyncObject,而SQL Server也可用一个表来模拟实现。

先创建一个同步表,相当于C#中的SyncObject,并插入一条记录(初始值为1)

create table SyncTable(id bit)
go
insert into SyncTable (id) values (1)

然后假设有个存储过程,有一系列操作,需要防止多线程同时访问到,可以这样写。

 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO create PROCEDURE Proc_Test
@name varchar(50)
AS
begin set xact_abort on begin tran update SyncTable set Id = Id * -1 waitfor DELAY '00:00:05' --假设一系列耗时操作 select @name commit tran set xact_abort off END
GO

然后分别打开两个新建查询(相当于两个线程)

exec Proc_Test @name='abc'
exec Proc_Test @name='def'

然后快速的对这两个查询,分别点“执行”

可以看到执行时间,一个是5秒,一个是9秒(因为是人工点的,所以先点的已经运行了差不多1秒)。

表明这个存储过程阻止了线程重入。

最新文章

  1. jQuery EasyUI Combobox 无法获取属性 options 的值: 对象为 null 或未定义
  2. atoi()函数
  3. ReSharper 卸载后 VS2012 没有提示问题
  4. 2016最全的web前端面试题及答案整理
  5. MM--发票校验 及基于采购订单的MIRO发票校验过程(
  6. Windows性能计数器2
  7. Linux硬盘命名和安装分区
  8. Building a RESTful Web Service(转)
  9. Nginx http 500错误分析及解决方法
  10. RecyclerView分割线——万能分割线
  11. 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写
  12. hadoop端口使用配置总结(非常好的总结)
  13. ES6随手学
  14. 2017-12-19python全栈9期第四天第二节之列表的增删查改之公共方法len和count和index
  15. 对评分矩阵进行分解,SVD与LSI
  16. TCP协议和UDP协议下的socket
  17. windows中,VS2017下,在Cmake中添加OpenCV依赖
  18. MVC+EF CODE FIRST的使用
  19. Apache-一个IP多个主机域名
  20. 云从科技 OCR任务 pixel-anchor 方法

热门文章

  1. LINQ inner join
  2. EBS R12重启后无法进入登录页面
  3. Linux字符界面下用户账户的设置
  4. 【Robot Framework】robot framework 学习以及selenium、appnium、requests实践(一)
  5. 第八十八天请假 PHP smarty模板 变量调节器,方法和块函数基本书写格式
  6. XproerIM V1,2,12,65376 发布。
  7. window date type
  8. phpstorm
  9. 如何用expdp、impdp按表空间导出、导入?
  10. Lua metatable & metamethod