-
Notifications
You must be signed in to change notification settings - Fork 0
/
safe_value.go
57 lines (50 loc) · 1.75 KB
/
safe_value.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package bngsocket
import (
"sync"
)
// newSafeBool erstellt ein neues _SafeBool-Objekt mit dem angegebenen booleschen Wert.
// Dieses Objekt verwendet Synchronisationsmechanismen, um einen sicheren Zugriff auf den Wert zu gewährleisten.
func newSafeBool(v bool) _SafeBool {
return _SafeBool{
newSafeValue(v),
}
}
// newSafeBytes erstellt ein neues _SafeBytes-Objekt mit den angegebenen Byte-Daten.
// Dieses Objekt verwendet Synchronisationsmechanismen, um einen sicheren Zugriff auf die Bytes zu gewährleisten.
func newSafeBytes(v []byte) _SafeBytes {
return _SafeBytes{
newSafeValue(v),
}
}
// newSafeInt erstellt ein neues _SafeInt-Objekt mit dem angegebenen int-Wert.
// Dieses Objekt verwendet Synchronisationsmechanismen, um einen sicheren Zugriff auf den Wert zu gewährleisten.
func newSafeInt(v int) _SafeInt {
return _SafeInt{
newSafeValue(v),
}
}
// newSafeValue erstellt ein neues _SafeValue-Objekt für einen generischen Typ T.
// Dieses Objekt verwendet einen Mutex und eine Bedingungsvariable, um einen sicheren Zugriff und Synchronisation zu gewährleisten.
func newSafeValue[T any](v T) _SafeValue[T] {
mutex := new(sync.Mutex)
return _SafeValue[T]{
value: &v,
lock: mutex,
cond: sync.NewCond(mutex),
changes: 0,
}
}
// newSafeAck erstellt ein neues _SafeAck-Objekt.
// Dieses Objekt verwendet einen sicheren Kanal für ACK-Rückmeldungen.
func newSafeAck() _SafeAck {
return _SafeAck{
_SafeChan: NewSafeChan[*_AckItem](),
}
}
// newSafeMap erstellt ein neues _SafeMap-Objekt für die angegebenen Typen X und T.
// Dieses Objekt verwendet eine sync.Map, um einen sicheren Zugriff auf die enthaltenen Daten zu gewährleisten.
func newSafeMap[X any, T any]() _SafeMap[X, T] {
return _SafeMap[X, T]{
Map: new(sync.Map),
}
}