Siempre que escriba programas estrictamente secuenciales (haga A, luego B, luego C; terminado!) no tendrá problemas de concurrencia, y los mecanismos de concurrencia de un idioma permanecerán irrelevantes .
Cuando se gradúa de programas de "ejercicio de programación" a cosas del mundo real, muy pronto se encontrará con problemas cuya solución es multi-threading (o el sabor de concurrencia que tenga disponible).
Caso: Programas con una GUI. Digamos que estás escribiendo un editor con revisión ortográfica. Desea que el corrector ortográfico lo haga silenciosamente en segundo plano, pero desea que la GUI acepte sin problemas las entradas del usuario. Entonces ejecuta esas dos actividades como hilos separados.
Caso: Recientemente escribí un programa (para el trabajo) que reúne estadísticas de dos archivos de registro y los escribe en una base de datos. Cada archivo tarda aproximadamente 3 minutos en procesarse. Moví esos procesos en dos hilos que corren uno al lado del otro, reduciendo el tiempo de procesamiento total de 6 minutos a un poco más de 3.
Caso: software de simulación científica/ingeniería. Hay muchos y muchos problemas que se resuelven al calcular algún efecto (flujo de calor, por ejemplo) en cada punto de una cuadrícula tridimensional que representa el sujeto de prueba (núcleo estelar, explosión nuclear, dispersión geográfica de una población de insectos ...). Básicamente, el mismo cálculo se realiza en cada punto y en muchos puntos, por lo que tiene sentido hacerlos en paralelo.
En todos esos casos y muchos más, cada vez que dos procesos informáticos acceden a la misma memoria (= variables, si lo desea) más o menos al mismo tiempo, existe la posibilidad de que interfieran entre sí y estropeen el trabajo de los demás. La gran rama de Computer Science que se ocupa de la "programación simultánea" trata con ideas sobre cómo resolver este tipo de problema.
Se puede encontrar una discusión inicial bastante útil de este tema in Wikipedia.
¿Quién es 'alguien'? ¿Podría dar un ejemplo? No creo que haya "alguien compartiendo mis objetos conmigo". Tal vez debería revisar debajo de la cama. –
* alguien * es solo otra pieza de código, en otro hilo, que accede a ese objeto. –
A veces es más rápido, algunas veces más lento, como la mayoría de las optimizaciones que se realizan sin medir. Así que a veces es algo bueno, y a veces esos bloqueos hubieran sido mejores. Es por eso que nos llamamos ** ingenieros de software **. – Eloff