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
- citire
- incrementation
- 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
- Dining philosopher problem
- Priority inversion
- Reader/Writers problem
3. Starvation
Busy waiting - o variabilă care se verifică
CAUTION
DO NOTT USE
while (x < 10) {
sleep(10)
}