-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathlock-free-array-queue.h
39 lines (28 loc) · 1.36 KB
/
lock-free-array-queue.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
* lock-free-array-queue.h: A lock-free somewhat-queue that doesn't
* require hazard pointers.
*
* (C) Copyright 2011 Xamarin Inc.
*/
#ifndef __MONO_LOCK_FREE_ARRAY_QUEUE_H__
#define __MONO_LOCK_FREE_ARRAY_QUEUE_H__
#include "fake-glib.h"
typedef struct _MonoLockFreeArrayChunk MonoLockFreeArrayChunk;
typedef struct {
size_t entry_size;
MonoLockFreeArrayChunk *chunk_list;
} MonoLockFreeArray;
typedef struct {
MonoLockFreeArray array;
gint32 num_used_entries;
} MonoLockFreeArrayQueue;
#define MONO_LOCK_FREE_ARRAY_INIT(entry_size) { (entry_size), NULL }
#define MONO_LOCK_FREE_ARRAY_QUEUE_INIT(entry_size) { MONO_LOCK_FREE_ARRAY_INIT ((entry_size) + sizeof (gpointer)), 0 }
gpointer mono_lock_free_array_nth (MonoLockFreeArray *arr, int index) MONO_INTERNAL;
typedef gpointer (*MonoLockFreeArrayIterateFunc) (int index, gpointer entry_ptr, gpointer user_data);
gpointer mono_lock_free_array_iterate (MonoLockFreeArray *arr, MonoLockFreeArrayIterateFunc func, gpointer user_data) MONO_INTERNAL;
void mono_lock_free_array_cleanup (MonoLockFreeArray *arr) MONO_INTERNAL;
void mono_lock_free_array_queue_push (MonoLockFreeArrayQueue *q, gpointer entry_data_ptr) MONO_INTERNAL;
gboolean mono_lock_free_array_queue_pop (MonoLockFreeArrayQueue *q, gpointer entry_data_ptr) MONO_INTERNAL;
void mono_lock_free_array_queue_cleanup (MonoLockFreeArrayQueue *q) MONO_INTERNAL;
#endif