我基本上有一个具有5个线程的应用程序,每个线程都从一个表中读取。该查询是来自表的简单SELECT TOP 1
*,但是我想强制执行锁定,以便下一个线程将从表中选择下一个记录,而不是锁定的记录。当应用程序完成其任务后,它将更新锁定的记录并释放锁定,然后再次重复该过程。这可能吗?
我建议的一种方法是在记录中沿记录的字段显示指示是否正在处理记录的字段。然后实现一个“从队列中读取下一个”存储过程,该存储过程执行以下操作,以确保没有2个进程选择相同的记录:
BEGIN TRANSACTION
-- Find the next available record that's not already being processed.
-- The combination of UPDLOCK and READPAST hints makes sure 2 processes don't
-- grab the same record, and that processes don't block each other.
SELECT TOP 1 @ID = ID
FROM YourTable WITH (UPDLOCK, READPAST)
WHERE BeingProcessed = 0
-- If we've found a record, set it's status to "being processed"
IF (@ID IS NOT NULL)
UPDATE YourTable SET BeingProcessed = 1 WHERE ID = @ID
COMMIT TRANSACTION
-- Finally return the record we've picked up
IF (@ID IS NOT NULL)
SELECT * FROM YourTable WHERE ID = @ID
有关这些表提示的更多信息,请参见MSDN。
是否可以混合事务程序化和基于注释的管理?默认情况下,@Transactional会在任何运行时进行回滚并重新抛出它。 我不想重播它,但返回可选。空()有可能吗?使用事务编程管理很容易实现:(我从Spring文档中获取了示例) 有可能以一种好的方式将它们结合起来吗?让我们说: 你认为,混合使用两种管理事务的方法是一种代码气味吗? 谢谢你。
主要内容:写在前面,Redisson实现Redis分布式锁的底层原理写在前面 现在面试,一般都会聊聊分布式系统这块的东西。通常面试官都会从服务框架(Spring Cloud、Dubbo)聊起,一路聊到分布式事务、分布式锁、ZooKeeper等知识。 所以咱们这篇文章就来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。 说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了
我正在调试我的web应用程序,我有一个POST请求。(使用ajax,使用xhrfields:{withcredentials:true})。dataType是'application/json',我的服务器是tomcat,我手动将我的“Access-Control-Allog-Origin”标头设置为“http://localhost:8080”。 跨源请求被阻止:同一源策略不允许读取http:/
注意的是下面事项并非表示 VUX 使用繁琐,部分只是出于确保有正确的依赖和配置,而部分是出于优化。 请将 babel-loader 的配置写到 .babelrc 里而不是使用 options,否则可能会出错。 折腾能力强的同学参考一下,下面即airyland/vux2模板主要处理的事项: 引入 reset.less,默认样式不包含reset,并且部分用户自己有一套reset样式,因此需要在App.
主要内容:分配矩阵,请求矩阵如果在资源分配图中形成一个循环,其中所有资源都有单个实例,则系统将死锁。 在具有多实例资源类型的资源分配图的情况下,周期是死锁的必要条件,但不是充分条件。 以下示例包含三个进程P1,P2,P3和三个资源R2,R2,R3。 所有资源都有单个实例。 如果我们分析图表,那么我们可以发现图表中存在一个循环,因为系统满足所有四种死锁条件。 分配矩阵 分配矩阵可以通过使用系统的资源分配图来形成。 在分配矩阵中
如何使android studio中的应用程序在手机锁定时工作。假设在任何紧急情况下,如果用户在手机上滑动或按下锁定按钮2次,手机锁定时,它会将其位置发送到保存的紧急号码。有什么想法吗?