- add sources.
[platform/framework/web/crosswalk.git] / src / native_client_sdk / src / examples / demo / nacl_io / queue.h
1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved.
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  */
5
6 #ifndef QUEUE_H_
7 #define QUEUE_H_
8
9 /* This file implements a single-producer/single-consumer queue, using a mutex
10  * and a condition variable.
11  *
12  * There are techniques to implement a queue like this without using memory
13  * barriers or locks on x86, but ARM's memory system is different from x86, so
14  * we cannot make the same assumptions about visibility order of writes. Using a
15  * mutex is slower, but also simpler.
16  *
17  * We make the assumption that messages are only enqueued on the main thread
18  * and consumed on the worker thread. Because we don't want to block the main
19  * thread, EnqueueMessage will return zero if the message could not be enqueued.
20  *
21  * DequeueMessage will block until a message is available using a condition
22  * variable. Again, this may not be as fast as spin-waiting, but will consume
23  * much less CPU (and battery), which is important to consider for ChromeOS
24  * devices. */
25
26 void InitializeMessageQueue();
27 int EnqueueMessage(char* message);
28 char* DequeueMessage();
29
30 #endif /* QUEUE_H_ */