Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 18907|Resposta: 0

[Fonte] bloqueio? Por que só pode bloquear a referência, mas não o tipo de valor

[Copiar link]
Publicado em 08/12/2016 10:43:37 | | |

Se você passar um tipo de valor, ele será bloqueado, e da próxima vez que o código rodar aqui, será bloqueado novamente, e não será o mesmo objeto duas vezes, então não pode ser travado



Fechadura(x)
{
  ...
}

O bloqueio é realmente feito através do objeto Monitor:

O acima é equivalente a:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
tente
{
  ...   
}
finalmente
{
  System.Threading.Monitor.Exit(obj);
}

Então, para citar as palavras originais do MSDN:
Use o Monitor para bloquear objetos (ou seja, tipos de referência), não tipos de valor. Quando você passa a variável do tipo avalue para Enter, ela é encaixada como um objeto. Se você passar a mesma variável para Enter novamente, ela fica em caixa como um objeto separado, e o thread não bloqueia. Nesse caso, o código que o Monitor supostamente está protegendo não está protegido. Além disso, quando você passa a variável para Sair, ainda outro objeto separado é criado. Como o objeto passado para Sair é diferente do objeto passado para Enter, o Monitor lança SynchronizationLockException. Para mais informações, consulte o tema conceitual Monitores.




Anterior:Atualize o Python 2.6.6 para o 2.7.5 no sistema Centos 6.4
Próximo:Diferença entre Directory.GetCurrentDirectory e Application.StartupPath
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com