Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-05-2006, 16:21   #1
pranzu
Junior Member
 
Iscritto dal: Apr 2002
Città: Casteddu
Messaggi: 15
[Java]Concorrenza

Riporto un esempio tratto da Thinking in Java e semplificato.

Codice:
class SimpleSemaphore extends Thread {
	public static volatile int semaphore = 0;
	public SimpleSemaphore() {
		this.setDaemon(true);
		start();
	}
	public void run() {
		while(true)
			if(semaphore == 0) {
				// yield();
				++semaphore;
				// yield();
				--semaphore;
				// yield();
			}
	}
	public static void main(String args[]) {
		new SimpleSemaphore();
		new SimpleSemaphore();
		new SimpleWatcher();
	}
}

class SimpleWatcher extends Thread {
	public SimpleWatcher() {
		start();
	}
	public void run() {
		while(true) {
			int s = SimpleSemaphore.semaphore;
			if(s == 0 || s == 1) { 
			} else {
				System.out.println("Irregular Value: " + s);
				System.exit(0);
			}
		}
	}		
}


Due thread SimpleSemaphore concorrono alla risorsa gestita dal semaforo e un terzo thread, SimpleWatcher, osserva se la variabile semaphore assume valori non validi (diversi da 0 e 1).
Commentando o no yield() e seconda di JVM e OS si possono osservare i valori non validi -1 e 2.
Mi spiego il valore 2 ma non il -1.
Qualcuno me lo spiega?
pranzu è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2006, 19:02   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
yield() lo possiamo macerare: con o senza non cambia nulla nel nostro caso. Che un thread dia l'occasione ad un altro di essere eseguito non significa che l'altro sia pronto in quel momento.

La scrittura volatile di una variabile è sincronizzata con tutte le letture successive di quella variabile.

L'operatore "++" e il suo compare "--" constano di due passaggi, un READ e un WRITE.

Le operazioni READ/WRITE eseguite dai Thread sono:

READ //if(semaforo == 0)
READ //parte READ dell'incremento
WRITE //parte WRITE dell'incremento
READ //parte READ del decremento
WRITE //parte WRITE del decremento

ogni WRITE è sincronizzato con i READ successivi. Assumendo che le operazioni coinvolte siano quelle indicate, detti Ta e Tb i due Thread che modificano il valore semaforo e Tc quello che stampa l'errore, un caso in cui l'ordine di sincronizzazione consente l'esistenza del valore -1 è:

Codice:
Ta legge (0)    -    if
Tb legge (0)    -    if
Ta legge (0)    -    parte READ dell'incremento
Tb legge (0)    -    parte READ dell'incremento
Ta scrive (1)   -    parte WRITE dell'incremento
Tb scrive (1)   -    parte WRITE dell'incremento
Ta legge (1)    -    parte READ del decremento
Ta scrive (0)   -    parte WRITE del decremento
Tb legge (0)    -    parte READ del decremento
Tb scrive (-1)  -    parte WRITE del decremento
Tc legge (-1)   -    quando si dice "al momento giusto"...
Descrittivamente, capita quando lo schedulatore inizia distribuendo le prime operazioni "una a testa" e poi, per un colpo di fortuna , decide di passare a coppie di istruzioni.

Ultima modifica di PGI-Bis : 06-05-2006 alle 19:04. Motivo: aggiunto ...e il suo compare "--"...
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2006, 12:16   #3
pranzu
Junior Member
 
Iscritto dal: Apr 2002
Città: Casteddu
Messaggi: 15
Grazie PGI
Spiegazione chiara e precisa.
pranzu è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Il telescopio spaziale James Webb ha oss...
Record per l'energia eolica: nel Regno U...
Dell e HP rimuovono la codifica e transc...
Prezzo eccezionale per Samsung Galaxy S2...
Black Friday esplosivo: arrivano extra s...
Google apre la strada al file sharing tr...
Black Friday Monitor 2025: OLED, QD-OLED...
Arrivano le nuove specifiche Matter 1.5:...
Microsoft rende open source la trilogia ...
DAZN continua la lotta contro la pirater...
Generativa o predittiva? Il futuro dell’...
BYD va all-in con la Atto 2: batteria pi...
Google modifica la richiesta di consenso...
Black Friday TV: OLED, QLED e Mini-LED a...
007 First Light torna a mostrarsi all'ev...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:05.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v