blob: ede7d79bf7b4818f4365c55524f1b42ac03bb975 [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
Mark Sleef5f2be42006-09-05 21:05:31 +000060 /**
61 * Sets stack size for created threads
62 *
63 * @param value size in megabytes
64 */
Marc Slemko66949872006-07-15 01:52:39 +000065 virtual void stackSize(int value);
66
Mark Sleef5f2be42006-09-05 21:05:31 +000067 /**
68 * Gets stack size for created threads
69 *
70 * @return int size in megabytes
71 */
Marc Slemko66949872006-07-15 01:52:39 +000072 virtual int stackSize() const;
73
Mark Sleef5f2be42006-09-05 21:05:31 +000074 /**
75 * Sets priority relative to current policy
76 */
Marc Slemko66949872006-07-15 01:52:39 +000077 virtual void priority(PRIORITY priority);
78
Mark Sleef5f2be42006-09-05 21:05:31 +000079 /**
80 * Gets priority relative to current policy
81 */
Marc Slemko66949872006-07-15 01:52:39 +000082 virtual PRIORITY priority() const;
83
84 private:
Marc Slemko66949872006-07-15 01:52:39 +000085 class Impl;
Mark Slee5ea15f92007-03-05 22:55:59 +000086 boost::shared_ptr<Impl> impl_;
Marc Slemko66949872006-07-15 01:52:39 +000087};
88
89}}} // facebook::thrift::concurrency
90
Mark Sleef5f2be42006-09-05 21:05:31 +000091#endif // #ifndef _THRIFT_CONCURRENCY_POSIXTHREADFACTORY_H_