Go Package sync: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 13: Line 13:
=TO DISTRIBUTE=
=TO DISTRIBUTE=
<FONT COLOR=darkkhaki>
<FONT COLOR=darkkhaki>
==WaitGroup==
=<tt>WaitGroup</tt>=
 
{{Internal|Go WaitGroup#Overview|<tt>WaitGroup</tt>}}
* <tt>[https://golang.org/pkg/sync/#WaitGroup sync.WaitGroup]</tt>  
 
A <tt>WaitGroup</tt> is a counting semaphore that waits for a collection of goroutines to finish. The main goroutine calls <tt>Add()</tt> to set the number of goroutines to wait for. Then each of the goroutines runs and calls <tt>Done()</tt> when finished. At the same time, <tt>Wait()</tt> can be used to block until all goroutines have finished.
 
<blockquote style="background-color: AliceBlue; border: solid thin LightSteelBlue;">
:Using a <tt>waitGroup</tt> to wait for goroutines to finish before exiting <tt>main()</tt>: [https://github.com/NovaOrdis/playground/blob/master/go/concurrency/waitGroup.go playground/go/concurrency/waitGroup.go]
</blockquote>


==Mutex==
==Mutex==

Revision as of 21:08, 1 September 2023

External

Internal

Overview

The sync package provides synchronization primitives to use when synchronization between goroutines is necessary.

TO DISTRIBUTE

WaitGroup

WaitGroup

Mutex

A Mutex is a mutual exclusion lock. Only one goroutine can enter the critical section at a time. Not until the call to the Unlock() function issued can another goroutine enter the critical section.

Usage pattern (the curly braces are not necessary):

var mutex sync.Mutex

...

mutex.Lock() {
    // do something in a mutual exclusion mode
}

mutex.Unlock()