Enquanto eu lia um trabalho de pesquisa sobre concorrência, chamado Software and the Concurrency Revolution ( versão html ). Me deparei com as seguintes linhas:
Infelizmente, embora os bloqueios funcionem, eles apresentam sérios problemas para o desenvolvimento moderno de software. Um problema fundamental dos bloqueios é que eles não são compostáveis . Você não pode pegar dois pedaços de código corretos baseados em bloqueio, combiná-los e saber que o resultado ainda está correto. O desenvolvimento de software moderno depende da capacidade de compor bibliotecas em programas maiores e, portanto, é uma dificuldade séria que não podemos construir componentes baseados em bloqueio sem examinar suas implementações.
Eu estava pensando, como o Java garante simultaneidade composível ou mesmo existe uma maneira de produzir esses cenários.
E como podemos sincronizar dados em uma ou mais bibliotecas? Um programador pode fazer isso a partir do seu programa ou depende da biblioteca sincronizar as coisas.
Se não for Java, existe alguma outra linguagem que use simultaneidade baseada em bloqueio e garanta simultaneidade composível?
Também é retirado do mesmo trabalho:
Há pelo menos três grandes problemas com métodos sincronizados. Primeiro, eles não são apropriados para tipos cujos métodos chamam funções virtuais em outros objetos (por exemplo, Vector de Java e SyncHashTable de Java), porque chamar código de terceiros enquanto mantém um bloqueio abre a possibilidade de conflito . Segundo, os métodos sincronizados podem executar muito bloqueio, adquirindo e liberando bloqueios em todas as instâncias do objeto, mesmo aquelas nunca compartilhadas entre os threads (geralmente a maioria). Terceiro, os métodos sincronizados também podem executar muito pouco bloqueio, não preservando a atomicidade quando um programa chama vários métodos em um objeto ou em objetos diferentes. Como um exemplo simples deste último, considere uma transferência bancária: account1.Credit (amount); account2.Debit (amount) ...
Nota: O artigo foi publicado em setembro de 2005