Mercurial > hg > Members > innparusu > Gears
changeset 30:604135010c3a
Add file synchronizedQueue.c
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 01 May 2015 18:26:05 +0900 |
parents | fa3038ae40ad |
children | dbbafae822f8 |
files | src/synchronizedQueue/synchronizedQueue.c |
diffstat | 1 files changed, 86 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/synchronizedQueue/synchronizedQueue.c Fri May 01 18:26:05 2015 +0900 @@ -0,0 +1,86 @@ +#include "synchronizedQueueContext.h" + +#include "origin_cs.h" + +#ifdef CLANG +#define _CbC_retrun __return +#define _CbC_environment __environment +#endif + +#define NUM 100 +#define ALLOCATE_SIZE 1000000000 + +extern __code initSynchronizedQueueContext(struct Context* context); + +static int num; + +__code code1(struct Context* context) { + context->data[Allocate]->allocate.size = sizeof(long); + context->data[Allocate]->allocate.next = Code2; + goto meta(context, Allocator); +} + +__code meta(struct Context* context, enum Code next) { + goto (context->code[next])(context); +} + +__code code2(struct Context* context) { + context->data[1]->count = 0; + goto meta(context, Code3); +} + +__code code3(struct Context* context) { + struct Allocate* allocate = &context->data[Allocate]->allocate; + long loop = context->data[1]->count; + if (loop == num) { + goto meta(context, Code4); + } + allocate->size = sizeof(struct Node); + allocate->after_put = Code3; + + context->data[1]->count++; + goto meta(context, Put); +} + + +__code put(struct Context* context) { + struct Allocate* allocate = &context->data[Allocate]->allocate; + + // sem_p + pthread_mutext_lock(&allocate->queue_remain->mutex); + while(sem->value == 0) { + pthread_cond_wait(&allocate->queue_remain->cond, &allocate->queue_remain->mutex); + } + allocate->queue_remain->value--; + pthread_mutext_unlock(&allocate->queue_remain->mutex); + + struct ListContext* list_context = context->data[Allocate]-> list_context; + list_context->data[Allocate]->value = context->data[1]->count; + + // sem_v + pthread_mutext_lock(&allocate->queue_count->mutex); + allocate->queue_count->value++; + pthare_cond_signal(&allocate->queue_count->cond); + pthread_mutext_unlock(&allocate->queue_count->mutex); + + goto metaPut(context, ); +} + +__code metaPut(struct Context* context, enum Code next){ +} + +__code take(struct Context* context) { +} + +__code cas(struct Context* context, enum Code next) { +} + +int main(int argc, char const* argv[]) { + num = (int)atoi(argv[1]); + struct Context* context = (struct Context*)malloc(sizeof(struct Context); + context->code = malloc(sizeof(__code*)*ALLOCATE_SIZE); + context->data = malloc(sizeof(union Data**)*ALLOCATE_SIZE); + context->heap = malloc(sizeof(union Data*)*ALLOCATE_SIZE); + initSynchronizedQueueContext(context); + goto start_code(context, Code1); +}