Types of queues

Serial

A B C D

Concurrent

A [--------] B [_______] C

Context switch

Process Thread shared memory Actor model message passing Coroutines

  • thread - code sequence executed as part of a program. They depend on CPU cores.
  • shared memory - shared resources between threads, either written or read.

Example

x = x + 1

  1. citire
  2. incrementation
  3. scriere
for (int i = 0; i < 100; i++) {
    x = x + 1
}
print(x);

1 single thread - 100 is printed 2

Race-conditions

  • [~] când avem read/modify/write x + 1
  • [~] check-then-act if (x) then

Solutions:

1. Mutex

for (int i = 0; i < 100; i++) {
    m.lock();
    x = x + 1;
    m.unlock();
}
print(x);

Functions: lock/unlock It is an object ce poate fi eliberat de obiectul de l-a preluat

Semaphore

wait/signal Queue ce așteptă procesele + o variabilă care arată la câte procese poți accessa (atomic) Poate fi eliberat de oricine

2. Deadlock

  • Dead-lock - îmbrățișare fatală
Coffman conditions (for a deadlock to occur):
  • Mutual admission
  • Hold & wait
  • No preemption
  • Circular wait
  1. Dining philosopher problem
  2. Priority inversion
  3. Reader/Writers problem

3. Starvation

Busy waiting - o variabilă care se verifică

CAUTION

DO NOTT USE

      while (x < 10) {
          sleep(10)
      }