25 lines
1003 B
Plaintext
25 lines
1003 B
Plaintext
Assignment name: deadlock_demo
|
|
Expected files: deadlock_demo.c
|
|
Allowed functions: memset, printf, malloc, free, write, pthread_create, pthread_detach,
|
|
pthread_join, pthread_mutex_init, pthread_mutex_destroy, pthread_mutex_lock,
|
|
pthread_mutex_unlock, usleep, gettimeofday
|
|
|
|
---
|
|
|
|
Cria um programa que demonstra deadlock e depois mostra como o resolver:
|
|
|
|
Parte 1 - Deadlock:
|
|
2 threads, 2 mutexes (mutex_a, mutex_b)
|
|
- Thread 1: lock mutex_a → sleep 100ms → lock mutex_b → unlock ambos
|
|
- Thread 2: lock mutex_b → sleep 100ms → lock mutex_a → unlock ambos
|
|
|
|
Parte 2 - Solução: Ambas threads fazem lock dos mutexes na mesma ordem.
|
|
|
|
O programa deve aceitar um argumento: 0 para deadlock, 1 para solução.
|
|
|
|
Uso: `./deadlock_demo 0` (demonstra deadlock)
|
|
Uso: `./deadlock_demo 1` (demonstra solução)
|
|
|
|
Hint: Deadlock é um risco real no Philosophers quando filósofos tentam pegar forks em ordens diferentes.
|
|
A solução mais comum é ordenar os recursos (forks com IDs mais baixos primeiro).
|