C# mutex

C# mutex
Nella programmazione C#, possiamo usare la classe Mutex per sincronizzare tra due thread. Funziona come una serratura. Impedisce a due thread di eseguire uno o più atti contemporaneamente. Mutex funziona in molti processi. Dà metodi waitone () e anche releasemutex (). Il metodo WaitOne () viene utilizzato per bloccare la risorsa e il metodo releasemutex () è qui per sbloccare la risorsa. È utile quando stiamo lavorando con un progetto multi-frame o un progetto in cui abbiamo creati più attività. Dovremmo usarlo quando stiamo cercando di bloccare altre attività o thread che non possono utilizzare la risorsa mentre l'altra attività o thread utilizza quella risorsa.

Qui, in questa guida, ti spiegheremo come utilizziamo la classe Mutex nella programmazione C#. Forniamo diversi esempi di utilizzo di questa classe Mutex () nel nostro programma C#. Eseguiamo gli esempi forniti in Ubuntu 20.04.

Esempio 1

Eseguiremo un esempio usando questa classe mutex (). Dato che stiamo usando Ubuntu 20.04 Per eseguire questi esempi, dobbiamo aprire l'editor di testo di questo Ubuntu 20.04 e quindi crea un file con qualsiasi nome di nostra scelta e salva questo file con l'estensione del file di ".CS ". Quindi digitare il seguente codice in questo file. Spieghiamo anche ogni riga di questo dato programma in dettaglio di seguito.

La prima riga di questo codice C# è "usare il sistema", una libreria e utilizzando questa libreria, possiamo ottenere classi e funzioni diverse del nostro codice C#. Ottiamo la funzione "Console" e "WriteLine" utilizzando questa libreria. La parola chiave "usando" viene utilizzata per la ricezione di parametri. Il sistema. Threading "è qui per generare attività e ricevere oggetti dalla classe. Ora importeremo lo spazio dei nomi con il nome "Domomutex". Abbiamo anche creato una classe chiamata "Programma". Creiamo un'istanza chiamata "Mutex" che è uguale a "New Mutex ()". Il "nuovo" è una parola chiave per la creazione di una nuova istanza.

Quindi chiama la funzione "principale" nel nostro codice C#. In questa funzione "principale", abbiamo un ciclo "per" utilizzato per creare cinque diversi thread. Poiché questo ciclo inizializza "A" con "1", la condizione qui è "a<=5” which means there are 5 iterations in the loop or the loop iterates 5 times and creacreatestiple threads. Each time the value of “a” increments when the loop executes and the condition is true. Then we create a Thread object with the name “threadObj” by using the “new” keyword. When this loop executes, it creates an object of the Thread. Now, we give the “name” to the “threadobj” which is equal to the value of “a”. It will store the name as “Thread” + a means the “Thread” and the value of “a” that “a” depends on the value of the loop iteration.

Quindi abbiamo "threadobj.Start () "in cui" start () "viene utilizzato per cambiare lo stato del" threadobj "nello stato di esecuzione. Al di fuori di questo ciclo "per", abbiamo "Console.Readkey () ". Questo utilizzerà per aspettare un tastier. Abbiamo un metodo sotto questo con il nome "Domomutex" che è "statico". Usiamo questo metodo per implementare la sincronizzazione usando il "Mutex". La "console.WriteLine "è qui per stampare l'affermazione scritta al suo interno. Dopo questa "console.Dichiarazione WriteLine ", useremo il metodo" Try ".

Poi di nuovo, abbiamo la "console.Dichiarazione WriteLine ". Quando vedi l'output, ti sarà chiaro come questa "console.WriteLine ”stampa la dichiarazione data. Il filo.Sleep (2000) ”è per sospendere o mettere in pausa l'esecuzione del thread corrente per un tempo che viene dato come parametro qui. Dopo questo, usiamo di nuovo la "console.Dichiarazione WriteLine ". Usiamo la parola chiave "parola chiave" per pulire le risorse che allochiamo nel blocco try o nell'istruzione all'interno di questo blocco "finalmente" eseguito quando l'istruzione try lascia il controllo. All'interno dell'istruzione "Finalmente", chiameremo il metodo "releasemutex", che viene utilizzato per lo sblocco in modo che un altro thread inizi l'esecuzione che sta cercando di eseguire.

Diamo anche l'output di questo codice nell'immagine qui sotto. Puoi vedere come questo codice fornisce l'output sullo schermo. Compiliamo il nostro codice con questo comando e quando il codice è privo di errori, creerà un file exe per noi. Questo file "exe" viene quindi eseguito usando il comando "mono". E ricorda che quando usiamo questo comando "mono", dobbiamo usare il ".Exe ”Estensione del file con il nome del file e quindi eseguire questo comando per ottenere l'output.

In questo output, puoi vedere che quando un thread vuole inserire la sezione critica, anche gli altri thread vogliono entrare, ma devono attendere fino a quando il primo thread non completa l'esecuzione perché utilizziamo la funzione Mutex "Waitone ()". Quando questo thread completa la sua esecuzione, il thread successivo entra e avvia la sua esecuzione ed esiste dopo aver completato il suo compito. Consente al thread successivo di inserire e avviare l'esecuzione. Gli stessi passaggi vengono ripetuti fino a quando la condizione è vera.

Esempio n. 2

Qui, abbiamo un'altra illustrazione usando il metodo Mutex (). Proviamo questo esempio per capire questo concetto.

Le stesse dichiarazioni utilizzate in questo codice C# sono "utilizzando il sistema" e "Sistema.Filo ". La classe è "mutexprogram" e nella classe, abbiamo creato un'istanza della classe mutex con il nome "mutex" utilizzando la parola chiave "nuova" e quindi chiamando la funzione "principale" sotto questo. Il metodo WaitOne () cerca di ottenere un blocco. Se il mutex non è disponibile, allora "waitone ()" blocca e attende fino a quando non è disponibile. Specifichiamo anche un limite di tempo qui. Se chiamiamo metodo waitone () sul "oggetto mutex" e il limite di tempo passa senza essere in grado di acquisire il mutex, allora waitOne restituisce false. Quando restituisce false, l'istruzione scritta di seguito verrà eseguita: la "console.Dichiarazione WriteLine ". E questa affermazione viene utilizzata per la stampa.

Se otteniamo il vero, andiamo alla sezione del codice eseguita, che è la funzione "run ()" e questa funzione è definita di seguito. Quando "run ()" termina, quindi il blocco "finalmente" esegue, che rilascia il mutex usando "mutexrelease". Spieghiamo questo "mutexrelease" nel codice precedente. Definiamo la funzione "run ()" qui in cui stamperemo una dichiarazione usando "Console.WriteLine () "e alla fine abbiamo la" console.Linea di lettura()". Questa "console.Readline ”è qui per la lettura di stringhe complete fino a quando non viene premuto il tasto Invio.

L'output mostra solo le istruzioni "run ()" perché restituisce vero e si sposta su "run ()". Se lo eseguiamo contemporaneamente sull'altro terminale, allora sull'altro terminale, mostrerà la dichiarazione scritta all'interno dell'istruzione IF mentre cerca di ottenere il "mutex" ma il "mutex" è già nell'uso di un'altra applicazione , quindi deve aspettare che il rilascio di "Mutex".

Conclusione

Questo tutorial esplora il "mutex" nella programmazione C#. Dimostriamo due esempi qui e usiamo questo "mutex" in modo da capire questo concetto. Questa classe "Mutex" ci fornirà le funzioni "WaitOne ()" e "RealSemutex ()". Questo "waitone ()" viene utilizzato per il blocco e il "releasemutex ()" viene utilizzato per sbloccare l'attività o il thread. Usiamo entrambi i metodi nei nostri esempi e spieghiamo tutti questi in dettaglio. Spero che imparerai questo concetto "Mutex" dopo uno studio approfondito di questa guida e sarai anche in grado di utilizzare questa classe "Mutex" nel tuo progetto.