atomic operation
once it starts, it will finish without being interrupted in database, this is called transaction processing (concurrency control)
ATM1 ATM2 balance=1000 1 read balance 5 read balance 2 balance-=100 6 balance-=100 3 give cash 7 give cash 4 update balance 8 update balance
write to db write to db
1 1000
5 1000
2 900
3 get $
6 900 7 get $
4 db=900
8 900
class MyThread extends Thread {
private int[] a; private int[] b; private int[] c; private int first; private int last; public MyThread (int[] x, int[] y, int[] z, int f int l) { a=x; b=y; c=z; first=f; last=l; } public void run() { for (int i=first;i<=last;i++) { c[i]=a[i]+b[i]; } }
}
int[] a=new int[100]; int[] b=new int[100]; int[] c=new int[100]; initialize a,b,c MyThread t1=new MyThread(a,b,c,0,24); MyThread t2=new MyThread(a,b,c,25,49); MyThread t3=new MyThread(a,b,c,50,74); MyThread t4=new MyThread(a,b,c,75,99); t1.start(); t2.start(); t3.start(); t4.start(); t1.join(); t2.join(); t3.join(); t4.join();
1. do they share data?
false
SIMD S=Single MIMD M=Multiple SISD I=Instruction MISD D=Data