Чтобы сделать мою программу более эффективной, могу ли я связать переменную * syn c .Mutex со структурой, чтобы при выполнении a.Mutex.Lock () она блокировала только операцию goroutines на игровом сервере?
Или это ничего не меняет (потому что когда я устанавливаю Lock на любой мьютекс, все переменные блокируются?), Если я объявляю переменную * syn c .Mutex как глобальную и затем вызывать то же самое с каждого отдельного игрового сервера? пример:
package main
import (
"fmt"
"sync"
)
type gameserver struct {
Players int
Mutex *sync.Mutex
}
func newGameServer() gameserver {
gs := gameserver{}
gs.Players = 0
gs.Mutex = &sync.Mutex{}
return gs
}
func (gs *gameserver) changeplayers() {
i := 0
for i < 1000000 {
gs.Mutex.Lock()
gs.Players++
gs.Mutex.Unlock()
i++
}
}
func main() {
a := newGameServer()
b := newGameServer()
go a.changeplayers()
go b.changeplayers()
fmt.Printf("%p\n%p", &a.Mutex, &b.Mutex)
}