- kdevelop3 project files
[lightOS.git] / kernel / spinlock.cpp
blob8e4a815f94373d3e8097e93546581d21cd93d2fd
1 /*
2 lightOS kernel
3 Copyright (C) 2007-2009 Jörg Pfähler
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 #include <kernel/spinlock.hpp>
20 #include <kernel/processor.hpp>
21 using namespace kernel;
23 void reentrant_spinlock::lock()
25 if (mAtom == 0 && mProcessorId == processor::id())return;
26 while (!mAtom.compare_and_exchange(1, 0)){}
27 mProcessorId = processor::id();
29 void reentrant_spinlock::unlock()
31 mProcessorId = -1;
32 mAtom = 1;