Prendi un programma multi-threaded "perfetto" arbitrario, su una piattaforma multi-threaded arbitraria, usando un linguaggio di programmazione arbitrario.
Supponendo che questo "perfetto" programma multi-thread:
- è impeccabile in termini di condizioni di gara
- gestisce perfettamente la memoria condivisa
- potrebbe / non usare un meccanismo di blocco (sospensione del thread o mutex rientrano in questa categoria)
- non ha bug imprevisti (100% senza bug)
- non usa costrutti complicati di linguaggio / sistema che non possono essere tradotti in un altro sistema in qualsiasi circostanza
e assumendo che questa piattaforma arbitraria
- è / non è conforme a POSIX (non importa)
- utilizza un modello di thread familiare
- non trasforma il meccanismo di blocco in un vortice di codici spaghetti voodoo (probabilmente)
e assumendo questa lingua arbitraria
- non utilizza costrutti di thread specifici del dominio (come la parola chiave
synchronized
di Java) - è platform agnostico al nucleo (come C e varianti)
- può essere compilato in modo incrociato su molte architetture / piattaforme diverse (non è limitato alla piattaforma attiva)
il codice intrinsecamente può essere implementato in modo che venga eseguito come previsto su una piattaforma single-threaded ?
Ad esempio, al posto dei thread la piattaforma a thread singolo utilizza un modello simile alla co-routine per simulare i thread. Esiste un difetto di progettazione fondamentale con tali concetti che inibirebbe la possibilità di eseguire il programma in questo ambiente thread-absent / thread-emulato?
La risposta a questa ampia domanda è molto specifica per la piattaforma, ma come ho accennato prima mi interessa sapere se esiste una proprietà intrinseca con multi-threading che li rende impossibili da porta agli ambienti senza thread.
Inoltre (e più concretamente), ci sono piattaforme / architetture specifiche mainstream che non consentirebbero uno scenario simile?