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