/* Copyright (c) 2012 The Chromium Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef QUEUE_H_ #define QUEUE_H_ /* This file implements a single-producer/single-consumer queue, using a mutex * and a condition variable. * * There are techniques to implement a queue like this without using memory * barriers or locks on x86, but ARM's memory system is different from x86, so * we cannot make the same assumptions about visibility order of writes. Using a * mutex is slower, but also simpler. * * We make the assumption that messages are only enqueued on the main thread * and consumed on the worker thread. Because we don't want to block the main * thread, EnqueueMessage will return zero if the message could not be enqueued. * * DequeueMessage will block until a message is available using a condition * variable. Again, this may not be as fast as spin-waiting, but will consume * much less CPU (and battery), which is important to consider for ChromeOS * devices. */ void InitializeMessageQueue(); int EnqueueMessage(char* message); char* DequeueMessage(); #endif /* QUEUE_H_ */