писать и читать десятки горутин. Есть основная структура которая реализует io.ReadWriter, поле offset, len и т.д, подобного формата.
                  
                  
                  
                  
                  
                  type file struct {
                  
                  
                    fd     *os.File
                  
                  
                    offset int64 // read offset
                  
                  
                    len    int32 // length of blocks
                  
                  
                    mx     *sync.RWMutex
                  
                  
                  }
                  
                  
                  
                  
                  
                  И сейчас я использую sync.RWMutex, когда читаю из файла использую mx.RLock(), defer mx.RUnlock(). Но хочу добиться максимальной производительности при конкурентном чтении и записи, defer тоже жрет что-то порядка 40нс и мьютекси сами по себе не бесплатное удовольствие, а вот что почти бесплатное так это атомарные операции.
                  
                  
                  
                  
                  
                  Вопрос, атомарными операциями можно обмазаться? 
                  
                  
                  Ну что-то по типу подобного плана
                  
                  
                  
                  
                  
                  n, err := f.fd.ReadAt(atomic.LoadInt64(&f.offset))
                  
                  
                  if err != nil {
                  
                  
                    return err
                  
                  
                  }
                  
                  
                  atomic.AddInt64(&f.offset, int64(n))
                  
                  
                  atomic.AddInt32(&f.len, 1)
                  
                  
                
операция чтения/записи файла в принципе не выглядит атомарной, так что скорее всего нельзя, ну а ваш пример тем более с гонкой
Обсуждают сегодня