переписано на read-write lock