1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/* 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Copyright (C) 2007, 2008, 2010 Apple Inc. All rights reserved. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Copyright (C) 2007 Justin Haygood (jhaygood@reaktix.com) 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Redistribution and use in source and binary forms, with or without 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * modification, are permitted provided that the following conditions 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * are met: 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 1. Redistributions of source code must retain the above copyright 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * notice, this list of conditions and the following disclaimer. 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 2. Redistributions in binary form must reproduce the above copyright 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * notice, this list of conditions and the following disclaimer in the 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * documentation and/or other materials provided with the distribution. 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * its contributors may be used to endorse or promote products derived 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * from this software without specific prior written permission. 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 287faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez */ 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef Threading_h 317faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#define Threading_h 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "wtf/WTFExport.h" 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <stdint.h> 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// For portability, we do not use thread-safe statics natively supported by some compilers (e.g. gcc). 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define AtomicallyInitializedStatic(T, name) \ 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath WTF::lockAtomicallyInitializedStaticMutex(); \ 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static T name; \ 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath WTF::unlockAtomicallyInitializedStaticMutex(); 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace WTF { 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 447faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#if OS(WIN) 457faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztypedef uint32_t ThreadIdentifier; 467faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#else 477faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztypedef intptr_t ThreadIdentifier; 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathWTF_EXPORT ThreadIdentifier currentThread(); 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathWTF_EXPORT void lockAtomicallyInitializedStaticMutex(); 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathWTF_EXPORT void unlockAtomicallyInitializedStaticMutex(); 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // namespace WTF 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing WTF::ThreadIdentifier; 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing WTF::currentThread; 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // Threading_h 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath