Faiss
Main Page
Namespaces
Classes
Files
File List
All
Classes
Namespaces
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
/data/users/hoss/faiss/WorkerThread.h
1
/**
2
* Copyright (c) Facebook, Inc. and its affiliates.
3
*
4
* This source code is licensed under the MIT license found in the
5
* LICENSE file in the root directory of this source tree.
6
*/
7
8
9
#pragma once
10
11
#include <condition_variable>
12
#include <future>
13
#include <deque>
14
#include <thread>
15
16
namespace
faiss {
17
18
class
WorkerThread
{
19
public
:
20
WorkerThread
();
21
22
/// Stops and waits for the worker thread to exit, flushing all
23
/// pending lambdas
24
~WorkerThread
();
25
26
/// Request that the worker thread stop itself
27
void
stop
();
28
29
/// Blocking waits in the current thread for the worker thread to
30
/// stop
31
void
waitForThreadExit
();
32
33
/// Adds a lambda to run on the worker thread; returns a future that
34
/// can be used to block on its completion.
35
/// Future status is `true` if the lambda was run in the worker
36
/// thread; `false` if it was not run, because the worker thread is
37
/// exiting or has exited.
38
std::future<bool>
add
(std::function<
void
()> f);
39
40
private
:
41
void
startThread();
42
void
threadMain();
43
void
threadLoop();
44
45
/// Thread that all queued lambdas are run on
46
std::thread thread_;
47
48
/// Mutex for the queue and exit status
49
std::mutex mutex_;
50
51
/// Monitor for the exit status and the queue
52
std::condition_variable monitor_;
53
54
/// Whether or not we want the thread to exit
55
bool
wantStop_;
56
57
/// Queue of pending lambdas to call
58
std::deque<std::pair<std::function<void()>, std::promise<bool>>> queue_;
59
};
60
61
}
// namespace
faiss::WorkerThread::~WorkerThread
~WorkerThread()
Definition:
WorkerThread.cpp:38
faiss::WorkerThread::stop
void stop()
Request that the worker thread stop itself.
Definition:
WorkerThread.cpp:49
faiss::WorkerThread::waitForThreadExit
void waitForThreadExit()
Definition:
WorkerThread.cpp:119
faiss::WorkerThread
Definition:
WorkerThread.h:18
faiss::WorkerThread::add
std::future< bool > add(std::function< void()> f)
Definition:
WorkerThread.cpp:57
Generated by
1.8.5