Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 18907|Odpověď: 0

[Zdroj] Zámek: Proč lze uzamknout pouze referenci, ale ne typ hodnoty?

[Kopírovat odkaz]
Zveřejněno 08.12.2016 10:43:37 | | |

Pokud předáte typ hodnoty, bude zablokován a příště, když kód běží zde, bude znovu zablokovaný, a nebude to stejný objekt dvakrát, takže ho nelze uzamknout



lock(x)
{
  ...
}

Zámek je ve skutečnosti proveden přes objekt Monitor:

Výše uvedené je ekvivalentní s:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
zkus
{
  ...   
}
nakonec
{
  System.Threading.Monitor.Exit(obj);
}

A pak cituji původní slova MSDN:
Používejte Monitor k zamčení objektů (tedy typů referencí), ne k typům hodnot. Když předáte proměnnou typu avalue do Enter, je označena jako objekt. Pokud stejnou proměnnou znovu předáte do Enter, je to označeno jako samostatný objekt a vlákno se neblokuje. V tomto případě není kód, který má Monitor údajně chránit, chráněn. Navíc, když předáte proměnnou do Exit, vytvoří se další samostatný objekt. Protože objekt předávaný do Exit se liší od objektu předaného do Enter, Monitor hodí SynchronizationLockException. Pro více informací viz konceptuální téma Monitory.




Předchozí:Upgradujte Python 2.6.6 na 2.7.5 na systému Centos 6.4
Další:Rozdíl mezi Directory.GetCurrentDirectory a Application.StartupPath
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com