00001 /* 00002 * Copyright 2006 Intel Corporation 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 00018 #ifndef _OASYS_ATOMIC_MUTEX_H_ 00019 #define _OASYS_ATOMIC_MUTEX_H_ 00020 00030 #include "../debug/DebugUtils.h" 00031 #include "../util/Singleton.h" 00032 00033 namespace oasys { 00034 00035 class Mutex; 00036 00040 Mutex* atomic_mutex(); 00041 00046 struct atomic_t { 00047 atomic_t(u_int32_t v = 0) : value(v) {} 00048 00049 volatile u_int32_t value; 00050 }; 00051 00059 void atomic_add(volatile atomic_t *v, u_int32_t i); 00060 00067 void atomic_sub(volatile atomic_t* v, u_int32_t i); 00068 00074 void atomic_incr(volatile atomic_t* v); 00075 00082 void atomic_decr(volatile atomic_t* v); 00083 00093 bool atomic_decr_test(volatile atomic_t* v); 00094 00105 u_int32_t atomic_cmpxchg32(volatile atomic_t* v, u_int32_t o, u_int32_t n); 00106 00112 u_int32_t atomic_incr_ret(volatile atomic_t* v); 00113 00120 u_int32_t atomic_add_ret(volatile atomic_t* v, u_int32_t i); 00121 00122 } // namespace oasys 00123 00124 #endif /* _OASYS_ATOMIC_MUTEX_H_ */