blob: 5f032c1ce5ec6dd7b9cdbd2c4fbf77469ca692c4 [file] [log] [blame]
Mark Slee9f0c6512007-02-28 23:58:26 +00001// Copyright (c) 2006- Facebook
2// Distributed under the Thrift Software License
3//
4// See accompanying file LICENSE or visit the Thrift site at:
5// http://developers.facebook.com/thrift/
6
Mark Sleef5f2be42006-09-05 21:05:31 +00007#ifndef _THRIFT_CONCURRENCY_POSIXTHREADFACTORY_H_
8#define _THRIFT_CONCURRENCY_POSIXTHREADFACTORY_H_ 1
Marc Slemko66949872006-07-15 01:52:39 +00009
10#include "Thread.h"
11
Marc Slemko6f038a72006-08-03 18:58:09 +000012#include <boost/shared_ptr.hpp>
13
Marc Slemko66949872006-07-15 01:52:39 +000014namespace facebook { namespace thrift { namespace concurrency {
15
Mark Sleef5f2be42006-09-05 21:05:31 +000016/**
17 * A thread factory to create posix threads
18 *
19 * @author marc
20 * @version $Id:$
21 */
Marc Slemko66949872006-07-15 01:52:39 +000022class PosixThreadFactory : public ThreadFactory {
23
24 public:
25
Mark Sleef5f2be42006-09-05 21:05:31 +000026 /**
27 * POSIX Thread scheduler policies
28 */
Marc Slemko66949872006-07-15 01:52:39 +000029 enum POLICY {
30 OTHER,
31 FIFO,
32 ROUND_ROBIN
33 };
34
Mark Sleef5f2be42006-09-05 21:05:31 +000035 /**
36 * POSIX Thread scheduler relative priorities,
37 *
38 * Absolute priority is determined by scheduler policy and OS. This
39 * enumeration specifies relative priorities such that one can specify a
40 * priority withing a giving scheduler policy without knowing the absolute
41 * value of the priority.
42 */
Marc Slemko66949872006-07-15 01:52:39 +000043 enum PRIORITY {
44 LOWEST = 0,
45 LOWER = 1,
46 LOW = 2,
47 NORMAL = 3,
48 HIGH = 4,
49 HIGHER = 5,
50 HIGHEST = 6,
51 INCREMENT = 7,
52 DECREMENT = 8
53 };
54
55 PosixThreadFactory(POLICY policy=ROUND_ROBIN, PRIORITY priority=NORMAL, int stackSize=1, bool detached=false);
56
57 // From ThreadFactory;
Mark Slee5ea15f92007-03-05 22:55:59 +000058 boost::shared_ptr<Thread> newThread(boost::shared_ptr<Runnable> runnable) const;
Marc Slemko66949872006-07-15 01:52:39 +000059
Marc Slemko3a3b53b2007-05-22 23:59:54 +000060 // From ThreadFactory;
Mark Slee2782d6d2007-05-23 04:55:30 +000061 Thread::id_t currentThreadId() const;
Marc Slemko3a3b53b2007-05-22 23:59:54 +000062
Mark Sleef5f2be42006-09-05 21:05:31 +000063 /**
64 * Sets stack size for created threads
65 *
66 * @param value size in megabytes
67 */
Marc Slemko66949872006-07-15 01:52:39 +000068 virtual void stackSize(int value);
69
Mark Sleef5f2be42006-09-05 21:05:31 +000070 /**
71 * Gets stack size for created threads
72 *
73 * @return int size in megabytes
74 */
Marc Slemko66949872006-07-15 01:52:39 +000075 virtual int stackSize() const;
76
Mark Sleef5f2be42006-09-05 21:05:31 +000077 /**
78 * Sets priority relative to current policy
79 */
Marc Slemko66949872006-07-15 01:52:39 +000080 virtual void priority(PRIORITY priority);
81
Mark Sleef5f2be42006-09-05 21:05:31 +000082 /**
83 * Gets priority relative to current policy
84 */
Marc Slemko66949872006-07-15 01:52:39 +000085 virtual PRIORITY priority() const;
86
87 private:
Marc Slemko66949872006-07-15 01:52:39 +000088 class Impl;
Mark Slee5ea15f92007-03-05 22:55:59 +000089 boost::shared_ptr<Impl> impl_;
Marc Slemko66949872006-07-15 01:52:39 +000090};
91
92}}} // facebook::thrift::concurrency
93
Mark Sleef5f2be42006-09-05 21:05:31 +000094#endif // #ifndef _THRIFT_CONCURRENCY_POSIXTHREADFACTORY_H_