libXDispatch 0.3.1
include/xdispatch/synchronized.h
Go to the documentation of this file.
00001 /*
00002 * Copyright (c) 2011 MLBA. All rights reserved.
00003 *
00004 * @MLBA_OPEN_LICENSE_HEADER_START@
00005 *
00006 * Licensed under the Apache License, Version 2.0 (the "License");
00007 * you may not use this file except in compliance with the License.
00008 * You may obtain a copy of the License at
00009 *
00010 *     http://www.apache.org/licenses/LICENSE-2.0
00011 *
00012 * Unless required by applicable law or agreed to in writing, software
00013 * distributed under the License is distributed on an "AS IS" BASIS,
00014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00015 * See the License for the specific language governing permissions and
00016 * limitations under the License.
00017 *
00018 * @MLBA_OPEN_LICENSE_HEADER_END@
00019 */
00020 
00021 
00022 
00023 #ifndef SYNCHRONIZED_H_
00024 #define SYNCHRONIZED_H_
00025 
00026 #ifndef __XDISPATCH_INDIRECT__
00027 #error "Please #include <xdispatch/dispatch.h> instead of this file directly."
00028 #endif
00029 
00030 #include "dispatch.h"
00031 
00032 __XDISPATCH_BEGIN_NAMESPACE
00033 
00038 class XDISPATCH_EXPORT synclock;
00039 
00046 XDISPATCH_EXPORT synclock get_lock_for_key(unsigned int key);
00047 
00055 class XDISPATCH_EXPORT synclock {
00056 
00057 public:
00058     synclock();
00059     synclock(const synclock&);
00060     ~synclock();
00061 
00062     operator bool() const;
00063 
00064     void unlock();
00065 
00066 private:
00067     dispatch_semaphore_t sem;
00068     bool lock;
00069 
00070     synclock& operator= (synclock);
00071 
00072     friend synclock get_lock_for_key(unsigned int);
00073     synclock(dispatch_semaphore_t);
00074 };
00075 
00076 # define XDISPATCH_CONCAT(A,B) A ## B
00077 # define XDISPATCH_LOCK_VAR(X) XDISPATCH_CONCAT(xd_synclock_, X)
00078 
00087 #  define XDISPATCH_SYNCHRONIZE( lock ) for(xdispatch::synclock XDISPATCH_LOCK_VAR(__LINE__)(lock) ; XDISPATCH_LOCK_VAR(__LINE__) ; XDISPATCH_LOCK_VAR(__LINE__).unlock() )
00088 
00097 #  define XDISPATCH_SYNCHRONIZED XDISPATCH_SYNCHRONIZE(xdispatch::get_lock_for_key(__COUNTER__))
00098 
00242 #ifndef XDISPATCH_NO_KEYWORDS
00243 # ifndef synchronize
00244 #  define synchronize( lock ) XDISPATCH_SYNCHRONIZE(lock)
00245 # endif
00246 
00247 # ifndef synchronized
00248 #  define synchronized XDISPATCH_SYNCHRONIZED
00249 # endif
00250 #endif
00251 
00252 __XDISPATCH_END_NAMESPACE
00253 
00254 #endif /* SYNCHRONIZED_H_ */

Generated on Wed Feb 22 2012 19:43:56 for libXDispatch by Doxygen 1.7.4
Content © 2011-2012 MLBA (about | privacy) – Design © 2010-2012 Emzeat. All Rights reserved.