// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/disk_cache/blockfile/file_lock.h" #include "base/atomicops.h" namespace { void Barrier() { #if !defined(COMPILER_MSVC) // VS uses memory barrier semantics for volatiles. base::subtle::MemoryBarrier(); #endif } } // namespace namespace disk_cache { FileLock::FileLock(BlockFileHeader* header) { updating_ = &header->updating; (*updating_)++; Barrier(); acquired_ = true; } FileLock::~FileLock() { Unlock(); } void FileLock::Lock() { if (acquired_) return; (*updating_)++; Barrier(); } void FileLock::Unlock() { if (!acquired_) return; Barrier(); (*updating_)--; } } // namespace disk_cache