00001 /* 00002 * Equation Cruncher 00003 * Copyright (C) 2004 Dhruv Matani(dhruvbird@yahoo.com) 00004 * 00005 * 00006 * This program is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU General Public License as 00008 * published by the Free Software Foundation; either version 2 of the 00009 * License, or (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, but 00012 * WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software 00018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00019 * USA 00020 */ 00021 00022 00023 #if !defined EC_ATOMIC_I686_HPP 00024 #define EC_ATOMIC_I686_HPP 00025 00026 namespace eqn_cruncher 00027 { 00028 void 00029 atomic_make_zero(int* _flag); 00030 00031 void 00032 atomic_wait_till_not_zero(int* _flag); 00033 00034 // Processor specific Mutes class. 00035 class Mutex 00036 { 00037 // _flag -> 0 Unlocked state. _flag -> 1 Locked state. 00038 // This Mutex uses a spin lock internally. 00039 int _flag; 00040 Mutex(Mutex const&); 00041 Mutex& operator=(Mutex const&); 00042 00043 public: 00044 Mutex() : _flag(0) { } 00045 00046 void 00047 lock(); 00048 00049 void 00050 unlock() 00051 { atomic_make_zero(&_flag); } 00052 }; 00053 00054 } 00055 00056 #endif // EC_ATOMIC_I686_HPP
1.2.18