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 9 namespace { 10 Barrier()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 20 namespace disk_cache { 21 FileLock(BlockFileHeader * header)22FileLock::FileLock(BlockFileHeader* header) { 23 updating_ = &header->updating; 24 (*updating_)++; 25 Barrier(); 26 acquired_ = true; 27 } 28 ~FileLock()29FileLock::~FileLock() { 30 Unlock(); 31 } 32 Lock()33void FileLock::Lock() { 34 if (acquired_) 35 return; 36 (*updating_)++; 37 Barrier(); 38 } 39 Unlock()40void FileLock::Unlock() { 41 if (!acquired_) 42 return; 43 Barrier(); 44 (*updating_)--; 45 } 46 47 } // namespace disk_cache 48