1 /**
2  * This module provides types and constants used in thread package.
3  *
4  * Copyright: Copyright Sean Kelly 2005 - 2012.
5  * License: Distributed under the
6  *      $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
7  *    (See accompanying file LICENSE)
8  * Authors:   Sean Kelly, Walter Bright, Alex Rønne Petersen, Martin Nowak
9  * Source:    $(DRUNTIMESRC core/thread/osthread.d)
10  */
11 
12 module core.thread.types;
13 
14 /**
15  * Represents the ID of a thread, as returned by $(D Thread.)$(LREF id).
16  * The exact type varies from platform to platform.
17  */
18 version (Windows)
19     alias ThreadID = uint;
20 else
21 version (Posix)
22 {
23     import core.sys.posix.pthread;
24 
25     alias ThreadID = pthread_t;
26 }
27 
28 struct ll_ThreadData
29 {
30     ThreadID tid;
31     version (Windows)
32         void delegate() nothrow cbDllUnload;
33 }
34 
35 version (GNU)
36 {
37     version (GNU_StackGrowsDown)
38         enum isStackGrowingDown = true;
39     else
40         enum isStackGrowingDown = false;
41 }
42 else
43 {
44     version (X86) enum isStackGrowingDown = true;
45     else version (X86_64) enum isStackGrowingDown = true;
46     else static assert(0, "It is undefined how the stack grows on this architecture.");
47 }
48 
49 package
50 {
51     version (Posix) static immutable size_t PTHREAD_STACK_MIN;
52 }
53 
54 shared static this()
55 {
56     version (Posix)
57     {
58         import core.sys.posix.unistd;
59 
60         PTHREAD_STACK_MIN = cast(size_t)sysconf(_SC_THREAD_STACK_MIN);
61     }
62 }