# README
サンプルリスト
このディレクトリには以下のサンプルがあります。
file | example name | note |
---|---|---|
atomic_add.go | syncs_atomic_add | atomic.AddXXX のサンプルです |
atomic_compareandswap.go | syncs_atomic_compareandswap | sync/atomic.CompareAndSwap のサンプルです |
atomic_types.go | syncs_atomic_types | Go 1.19 から追加された sync/atomic パッケージ内の型についてのサンプルです |
use_map.go | syncs_use_map | sync.Mapの使い方とそれをラップした型の紹介です |
no_sync.go | syncs_no_sync | 同期なしで非同期処理をしているサンプルです |
use_channel.go | syncs_use_channel | 値の同期をチャネルを使って実現しているサンプルです |
use_cond_broadcast.go | syncs_use_cond_broadcast | sync.Cond.Broadcast() のサンプルです |
use_cond_siginal.go | syncs_use_cond_signal | sync.Cond.Signal() のサンプルです |
use_mutex.go | syncs_use_mutex | sync.Mutex のサンプルです |
use_once.go | syncs_use_once | sync.Onceのサンプルです |
use_oncefunc.go | syncs_use_oncefunc | Go 1.21 で追加された sync.OnceFunc() のサンプルです |
use_oncevalue.go | syncs_use_oncevalue | Go 1.21 で追加された sync.OnceValue() のサンプルです |
use_oncevalues.go | syncs_use_oncevalues | Go 1.21 で追加された sync.OnceValues() のサンプルです |
use_pool.go | syncs_use_pool | sync.Poolのサンプルです |
mutex_trylock.go | syncs_mutex_trylock | Go 1.18 で追加された mutex.TryLock() についてのサンプルです。 |
use_rwmutex.go | syncs_use_rwmutex | sync.RWMutex のサンプルです。 |
rwmute_trylock.go | syncs_rwmutex_trylock | Go 1.18 で追加された RWMutex の TryLock() と TryRLock() のサンプルです。 |
# Packages
Package map は、カスタムマップを定義しています。.
# Functions
AtomicAdd -- atomic.AddXXX のサンプルです。
同期なしのサンプルは no_sync.go を参照。
# REFERENCES - https://pkg.go.dev/[email protected] - https://pkg.go.dev/sync/[email protected] - https://levelup.gitconnected.com/go-a-benchmark-to-compare-synchronization-techniques-ed73e118ec35.
AtomicTypes -- Go 1.19 から追加された sync/atomic パッケージ内の型についてのサンプルです。
Go 1.18 までの atomic.AddXXXX() を使ったサンプルは atomic_add.go を参照。
# REFERENCES - https://dev.to/emreodabas/quick-guide-go-119-features-1j40 - https://go.dev/doc/go1.19#atomic_types.
CompareAndSwap -- sync/atomic.CompareAndSwap のサンプルです。
# REFERENCES - https://pkg.go.dev/[email protected] - https://pkg.go.dev/sync/[email protected].
MutexTryLock は、Go 1.18 で追加された mutex.TryLock() についてのサンプルです。
> TryLock tries to lock m and reports whether it succeeded.
NewRegister -- このパッケージ用のサンプルを登録する mapping.Register を生成します。.
NoSync -- 同期なしで非同期処理をしているサンプルです。
# REFERENCES - https://pkg.go.dev/[email protected] - https://pkg.go.dev/sync/[email protected] - https://levelup.gitconnected.com/go-a-benchmark-to-compare-synchronization-techniques-ed73e118ec35.
RWMutexTryLock は、Go 1.18 で追加された RWMutex の TryLock() と TryRLock() のサンプルです。
使い方としては、Mutex.TryLock() と同じ。RLockのTry版がTryRLock, LockのTry版がTryLockとなる。
# REFERENCES - https://pkg.go.dev/[email protected]#RWMutex.TryLock - https://pkg.go.dev/[email protected]#RWMutex.TryRLock.
UseChannel -- 値の同期をチャネルを使って実現しているサンプルです。
- sync/atomic.AddXXX のサンプルは atomic_add.go を参照。 - 同期なしのサンプルは no_sync.go を参照。
基本的にチャネルは atomic.AddXXX() や sync.Mutex などと比べて遅いが プログラムとしては非同期処理の一番面倒な同期部分を丸ごとチャネルに 任せることができるので、やはり分かりやすい。
チャネルが遅いといっても、(50000*2)*5 の繰り返しで - atomic.AddXXX が約 10 ms - sync.Mutex が約 13 ms - チャネル版が 約 100 ms
なので、極端にスピードが求められるシチュエーション以外は十分使える.
UseCondBroadcast -- sync.Cond.Broadcast() のサンプルです。
- sync/atomic.AddXXX のサンプルは atomic_add.go を参照。 - 同期なしのサンプルは no_sync.go を参照。 - チャネルを使ったサンプルは use_channel.go を参照。
# REFERENCES - https://pkg.go.dev/[email protected] - https://pkg.go.dev/sync/[email protected] - https://bit.ly/3i4X1ov - https://mattn.kaoriya.net/software/lang/go/20140625223125.htm.
UseCondSignal -- sync.Cond.Signal() のサンプルです。
- sync/atomic.AddXXX のサンプルは atomic_add.go を参照。 - 同期なしのサンプルは no_sync.go を参照。 - チャネルを使ったサンプルは use_channel.go を参照。
# REFERENCES - https://pkg.go.dev/[email protected] - https://pkg.go.dev/sync/[email protected] - https://bit.ly/3i4X1ov - https://mattn.kaoriya.net/software/lang/go/20140625223125.htm.
UseMap は、sync.Mapの使い方とそれをラップした型の紹介です。
# REFERENCES - https://hjr265.me/blog/synchronization-constructs-in-go-standard-library/ - https://pkg.go.dev/[email protected]#Map.
UseMutex -- sync.Mutex のサンプルです。
- sync/atomic.AddXXX のサンプルは atomic_add.go を参照。 - 同期なしのサンプルは no_sync.go を参照。 - チャネルを使ったサンプルは use_channel.go を参照。
# REFERENCES - https://pkg.go.dev/[email protected] - https://pkg.go.dev/sync/[email protected] - https://levelup.gitconnected.com/go-a-benchmark-to-compare-synchronization-techniques-ed73e118ec35.
UseOnce は、sync.Onceのサンプルです.
UseOnceFunc は、Go 1.21 で追加された sync.OnceFunc() のサンプルです。
# REFERENCES - https://pkg.go.dev/[email protected]#OnceFunc.
UseOnceValue は、Go 1.21 で追加された sync.OnceValue() のサンプルです。
# REFERENCES - https://pkg.go.dev/[email protected]#OnceValue.
UseOnceValues は、Go 1.21 で追加された sync.OnceValues() のサンプルです。
# REFERENCES - https://pkg.go.dev/[email protected]#OnceValues.
UsePool は、sync.Poolのサンプルです。
# REFERENCES - https://pkg.go.dev/[email protected]#Pool.
UseRWMutex は、sync.RWMutex のサンプルです。
RWMutexは、読み取りと書き込みで別々にロックを取れるMutex。
ドキュメントには以下のように記載されている。
> A RWMutex is a reader/writer mutual exclusion lock.