Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [JAVA] lock()

  1. #1

    [JAVA] lock()

    Definizione del metodo lock()

    Acquires the lock.

    If the lock is not available then the current thread becomes disabled for thread scheduling purposes and lies dormant until the lock has been acquired.

    Cosa vuol dire che, nel caso in cui il lock è chiuso, il thread diventa impossibilitato a essere scelto dallo scheduler, e rimane "dormant" finchè il lock non sarà acquisito?

    Ma se non può essere scelto dallo scheduler, come può acquisire il lock?

    Forse sto facendo confusione tra la fase di acquisizione di lock e la fase di scelta dello scheduler?

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Significa che rimane "dormant" ovvero inattivo e quindi non "scedulabile" finche' sulla risorsa c'e' un lock "altrui".
    Quando tale lock verra' rilasciato tutti i thread inattivi perche' in attesa di poter acquisire il lock diverranno nuovamente schedulabili.
    Almeno cosi' credo.

  3. #3
    Dunque rimane comunque runnable, e quando il lock verrà rilasciato potrà accedere alla CPU in quanto eleggibile.

    Allora faccio un'altra domanda:

    ho un Thread che acquisisce il lock, implicito o esplicito, su un oggetto.
    Mettiamo poi che un secondo thread chieda l'accesso a tutt'altro oggetto di un'altra classe a sua volta con richiesta di lock esclusivo.

    DOMANDA VITALE:

    i due thread possono comunque spartirsi la CPU reciprocamente, dato che chiedono il lock su due oggetti diversi, o comunque la CPU sarà esclusiva del primo thread che ha ottenuto il lock?

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    La cpu non viene "spartita".
    Piu' correttamente i due thread potranno tranquillamente essere eseguiti in maniera concorrente (In caso di cpu singola) o in maniera parallela (In caso di core 2 o quad core) dal momento in cui chiedono lock che hanno come "oggetto"... istanze differenti.

    Non conta la classe in questione... bensi' l'istanza.

    Lock su istanze differenti non creano problemi di corse critiche o ancor peggio deadlock (Sempre supposto che esse non condividano qualcosa... come ad esempio della variabili statiche appartenenti alla classe di cui entrambe sono, appunto, istanza).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.