1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "net/disk_cache/blockfile/file_lock.h" 6 7#include "base/atomicops.h" 8 9namespace { 10 11void Barrier() { 12#if !defined(COMPILER_MSVC) 13 // VS uses memory barrier semantics for volatiles. 14 base::subtle::MemoryBarrier(); 15#endif 16} 17 18} // namespace 19 20namespace disk_cache { 21 22FileLock::FileLock(BlockFileHeader* header) { 23 updating_ = &header->updating; 24 (*updating_)++; 25 Barrier(); 26 acquired_ = true; 27} 28 29FileLock::~FileLock() { 30 Unlock(); 31} 32 33void FileLock::Lock() { 34 if (acquired_) 35 return; 36 (*updating_)++; 37 Barrier(); 38} 39 40void FileLock::Unlock() { 41 if (!acquired_) 42 return; 43 Barrier(); 44 (*updating_)--; 45} 46 47} // namespace disk_cache 48