Mutex: Difference between revisions

1,971 bytes added ,  2 years ago
Mutex en FreeBASIC
No edit summary
(Mutex en FreeBASIC)
Line 451:
Print 3: 1 2 3
</pre>
 
 
=={{header|FreeBASIC}}==
Extracted from FreeBASIC help.
FreeBASIC has the following Mutex functions:
MutexCreate, MutexLock, MutexUnlock, MutexDestroy and ThreadCreate.
 
<lang freebasic>' Threading synchronization using Mutexes
' If you comment out the lines containing "MutexLock" and "MutexUnlock", the
' threads will not be in sync and some of the data may be printed out of place.
 
Const max_hilos = 10
 
Dim Shared As Any Ptr bloqueo_tty
 
' Teletipo unfurls some text across the screen at a given location
Sub Teletipo(Byref texto As String, Byval x As Integer, Byval y As Integer)
'
' This MutexLock makes simultaneously running threads wait for each
' other, so only one at a time can continue and print output.
' Otherwise, their Locates would interfere, since there is only one cursor.
'
' It's impossible to predict the order in which threads will arrive here and
' which one will be the first to acquire the lock thus causing the rest to wait.
Mutexlock bloqueo_tty
For i As Integer = 0 To (Len(texto) - 1)
Locate x, y + i : Print Chr(texto[i])
Sleep 25, 1
Next i
' MutexUnlock releases the lock and lets other threads acquire it.
Mutexunlock bloqueo_tty
End Sub
 
Sub Hilo(Byval datos_usuario As Any Ptr)
Dim As Integer id = Cint(datos_usuario)
Teletipo "Hilo (" & id & ").........", 1 + id, 1
End Sub
 
' Create a mutex to syncronize the threads
bloqueo_tty = Mutexcreate()
 
' Create child threads
Dim As Any Ptr sucesos(0 To max_hilos - 1)
For i As Integer = 0 To max_hilos - 1
sucesos(i) = Threadcreate(@Hilo, Cptr(Any Ptr, i))
If sucesos(i) = 0 Then
Print "Error al crear el hilo:"; i
Exit For
End If
Next i
 
' This is the main thread. Now wait until all child threads have finished.
For i As Integer = 0 To max_hilos - 1
If sucesos(i) <> 0 Then Threadwait(sucesos(i))
Next i
 
' Clean up when finished
Mutexdestroy(bloqueo_tty)
Sleep</lang>
 
 
=={{header|Go}}==
2,169

edits