How to sync between processes rather than threads

# lock across process
e.g. Server handles request from different clients, there clients are essentially different processes, they could potentially write to the same piece
of data(e.g. same records in table), so we need to make sure these access well synchronized.

Since normal locking mechnism applies only to inter process(inter-threads), for normal lock from JDK won‘t work here.

In this case, we need to use some medium from outside, which could be database records or some file on our hard disk.

## Using database records to be mutual exclusive

CREATE OR REPLACE PROCEDURE BBDEV_DBO.Prcubblock(txtType IN CHAR, success OUT INT) IS
intRecCount INT;
BEGIN
     DELETE FROM UBBMSTLOCK WHERE dtlastmodified <= SYSDATE - 1/48;
     SELECT COUNT(*) INTO intRecCount FROM UBBMSTLOCK;
     IF (intRecCount = 0) THEN
         INSERT INTO UBBMSTLOCK VALUES (‘ ‘, 0, SYSDATE);
     END IF;
     IF (txtType = ‘U‘) THEN
          UPDATE UBBMSTLOCK l
          SET l.txtlocktype = ‘U‘, l.dtlastmodified = SYSDATE
          WHERE l.txtlocktype = ‘ ‘ OR l.txtlocktype = ‘U‘;
          success := SQL%Rowcount;
     ELSIF txtType = ‘S‘ THEN
          UPDATE UBBMSTLOCK l
          SET l.txtlocktype = ‘S‘, l.dtlastmodified = SYSDATE
          WHERE l.txtlocktype = ‘ ‘ OR l.txtlocktype = ‘S‘;
          success := SQL%Rowcount;
          IF (success > 0) THEN
             UPDATE UBBMSTLOCK l
             SET l.Intlockcount = l.Intlockcount + 1, l.dtlastmodified = SYSDATE
             WHERE l.txtlocktype = ‘S‘;
          END IF;
     ELSE
          success := 0;
     END IF;
     COMMIT;
EXCEPTION
WHEN OTHERS THEN
     ROLLBACK;
     success := 0;
END;
/

时间: 2024-10-12 08:30:32

How to sync between processes rather than threads的相关文章

Processes

前提: ①组件(Components):Activities.Services.Content Providers.Broadcast Receivers. ②进程(Processes).线程(Threads) 当一个应用程序组件启动,且没有其他组件正在运行时,安卓系统会为这个应用启动一个新的进程和一个干活的单线程.默认情况下,同一应用程序的所有组件运行在同一进程和线程(即,主线程). 如果一个应用程序组件启动,且该应用程序已有一个进程(由于该应用程序的另外一个组件已存在),那么这个组件将在已有

C线程代业代写代调试、POSIX Threads代编码

C线程代业代写代调试.POSIX Threads代编码(CSCI 363) Project Two -- POSIX ThreadsInstructionsThis program sorts strings using "enzymes". An enzyme is a function that sorts two consecutive characters. We define one enzyme per pair of consecutive characters; the

Android adb bugreport工具分析和使用

bugreport是什么,怎么用? Android系统想要成为一个功能完备,生态繁荣的操作系统,那就必须提供完整的应用开发环境.而在应用开发中,app程序的调试分析是日常生产中进程会进行的工作.Android为了方便开发人员分析整个系统平台和某个app在运行一段时间之内的所有信息,专门开发了bugreport工具.这个工具使用起来十分简单,只要在终端执行(linux或者win): adb bugreport > bugreport.txt 即可生成bugreport文件.但是有一个问题是,这个生

(转)Linux下PS命令详解

(转)Linux下PS命令详解 整理自:http://blog.chinaunix.net/space.php?uid=20564848&do=blog&id=74654 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续: (2) top:如果想对进程运行时间监控,应该用 top 命令: (3) kill 用于杀死进程或者给进程发送信号: (4) 查看文章最后的man手册,可以查看ps的每项输出的含义

The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software

The Free Lunch Is Over A Fundamental Turn Toward Concurrency in Software By Herb Sutter The biggest sea change in software development since the OO revolution is knocking at the door, and its name is Concurrency. This article appeared in Dr. Dobb's J

Erlang ERTS的Trap机制的设计及其用途

出处:http://mryufeng.iteye.com/blog/334744 erlang的trap机制在实现中用的很多,在费时的BIF操作中基本上都可以看到.它的实现需要erl vm的配合.它的作用基本上有3个: 1. 把费时操作分阶段做.由于erlang是个软实时系统,一个进程或者bif不能无限制的占用cpu时间.所以erlang的每个进程执行的时候,最多只能执行一定数量的指令.这个是设计方面的目标.实现上也要配套.所以比如md5,list_member查找这种可能耗时的操作都是用tra

storm - 简介

一 Storm简介 Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架,它原来是由BackType开发,后BackType被Twitter收购,将Storm作为Twitter的实时数据分析系统. 实时数据处理的应用场景很广泛,例如商品推荐,广告投放,它能根据当前情景上下文(用户偏好,地理位置,已发生的查询和点击等)来估计用户点击的可能性并实时做出调整. twitter列举了storm的三大作用领域: 1.信息流处理(Stream Processing) Storm可以用来实

33、线程与全局解释器锁(GIL)

之前我们学了很多进程间的通信,多进程并发等等,今天我们来学习线程,线程和进程是什么关系,进程和线程有什么相同而又有什么不同今天就来揭晓这个答案. 一.线程概论 1.何为线程 每个进程有一个地址空间,而且默认就有一个控制线程.如果把一个进程比喻为一个车间的工作过程那么线程就是车间里的一个一个流水线. 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位. 多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间(

J.U.C并发框架源码阅读(三)ReentrantLock

基于版本jdk1.7.0_80 java.util.concurrent.locks.ReentrantLock 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ /* * * * * * * Written by Doug Lea with assistance from members of JCP JSR