should probably lock s and t so t can not be changed from another goroutine after t.List() is called but before s.Remove(...) is called - but that depends on the guarantees of the provided thread safety - does it have to be fully consistent for the time of the call for both sets or can it diverge?