queue.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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#include "ppapi/c/pp_var.h" 10 11/* This file implements a single-producer/single-consumer queue, using a mutex 12 * and a condition variable. 13 * 14 * There are techniques to implement a queue like this without using memory 15 * barriers or locks on x86, but ARM's memory system is different from x86, so 16 * we cannot make the same assumptions about visibility order of writes. Using a 17 * mutex is slower, but also simpler. 18 * 19 * We make the assumption that messages are only enqueued on the main thread 20 * and consumed on the worker thread. Because we don't want to block the main 21 * thread, EnqueueMessage will return zero if the message could not be enqueued. 22 * 23 * DequeueMessage will block until a message is available using a condition 24 * variable. Again, this may not be as fast as spin-waiting, but will consume 25 * much less CPU (and battery), which is important to consider for ChromeOS 26 * devices. */ 27 28void InitializeMessageQueue(); 29int EnqueueMessage(struct PP_Var message); 30struct PP_Var DequeueMessage(); 31 32#endif /* QUEUE_H_ */ 33