Immagina un ipotetico ambiente di programmazione che è in gran parte simile a Java o .NET, ovvero orientato agli oggetti, garbage-collected, ecc., ma con una piccola modifica:
Ogni volta che chiami un metodo su un oggetto, viene ottenuto un blocco in modo che nessun thread possa eseguire contemporaneamente i metodi sullo stesso oggetto. Il blocco viene abbandonato quando il metodo restituisce.
Anche il blocco viene temporaneamente abbandonato quando chiami Thread.Join (questo serve solo per prevenire determinati tipi di situazioni di deadlock).
Quanto sarebbe grave l'impatto sulle prestazioni di questo? Quanto questo potrebbe interferire con la concorrenza? Esistono algoritmi / programmi che sarebbe impossibile parallelizzare in questo tipo di ambiente?
Nella mia domanda postata in precedenza, è stato fornito un collegamento a questa pagina relativa a GIL in CPython che reclama prestazioni severe e problemi di concorrenza con questo. Tuttavia, afferma anche che questo ambiente utilizza il conteggio dei riferimenti e l'incremento / decremento di quel conteggio dei riferimenti è un'operazione che ottiene tale blocco. Non assumiamo quello; Il GC di .NET è mark-and-sweep, non conteggiato come riferimento.