1
0
mirror of https://github.com/ManyakRus/starter.git synced 2025-12-28 02:51:05 +02:00
Files
starter/postgres_pgxpool/postgres_pgxpool_waitgroup.go
2025-12-18 15:50:51 +03:00

65 lines
2.0 KiB
Go

package postgres_pgxpool
import (
"golang.org/x/net/context"
"sync"
)
// ctx_Connect - контекст для одного соединения, при отмене контекста соединение закроется
var ctx_Connect *context.Context
// cancelCtxFunc - функция для отмены контекста
var cancelCtxFunc func()
// init - инициализация переменных
func init() {
ctx1, CancelFunc1 := context.WithCancel(context.Background())
ctx_Connect = &ctx1
cancelCtxFunc = CancelFunc1
}
// waitGroup_Connect - группа ожидания завершения всех частей программы
var waitGroup_Connect = new(sync.WaitGroup)
// mutex_WaitGroup_Connect - гарантирует получение waitGroup_Connect с учётом многопоточности
var mutex_WaitGroup_Connect = sync.RWMutex{}
// mutex_Ctx_Connect - мьютекс для Ctx_Connect
var mutex_Ctx_Connect = sync.RWMutex{}
// SetWaitGroup - присваивает внешний WaitGroup
func SetWaitGroup(wg *sync.WaitGroup) {
mutex_WaitGroup_Connect.RLock()
defer mutex_WaitGroup_Connect.RUnlock()
waitGroup_Connect = wg
}
// GetWaitGroup - возвращает группу ожидания завершения всех частей программы
func GetWaitGroup() *sync.WaitGroup {
mutex_WaitGroup_Connect.Lock()
defer mutex_WaitGroup_Connect.Unlock()
if waitGroup_Connect == nil {
waitGroup_Connect = &sync.WaitGroup{}
}
return waitGroup_Connect
}
// GetContext возвращает указатель на контекст с защитой RLock
func GetContext() *context.Context {
mutex_Ctx_Connect.RLock()
defer mutex_Ctx_Connect.RUnlock()
return ctx_Connect
}
// SetContext устанавливает новое значение контекста с защитой Lock
func SetContext(ctx *context.Context) {
mutex_Ctx_Connect.Lock()
defer mutex_Ctx_Connect.Unlock()
ctx_Connect = ctx
}