source: src/libcfa/concurrency/alarm.h@ 93401f8

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 93401f8 was b69ea6b, checked in by Thierry Delisle <tdelisle@…>, 8 years ago

Updated alarm to use bits/cfatime and fixed preemption for coroutines

  • Property mode set to 100644
File size: 2.1 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// alarm.h --
8//
9// Author : Thierry Delisle
10// Created On : Fri Jun 2 11:31:25 2017
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Sat Jul 22 09:59:27 2017
13// Update Count : 3
14//
15
16#pragma once
17
18#include <stdbool.h>
19#include <stdint.h>
20
21#include <assert.h>
22
23#include "bits/cfatime.h"
24
25struct thread_desc;
26struct processor;
27
28//=============================================================================================
29// Clock logic
30//=============================================================================================
31
32__cfa_time_t __kernel_get_time();
33void __kernel_set_timer( __cfa_time_t alarm );
34
35//=============================================================================================
36// Alarm logic
37//=============================================================================================
38
39struct alarm_node_t {
40 __cfa_time_t alarm; // time when alarm goes off
41 __cfa_time_t period; // if > 0 => period of alarm
42 alarm_node_t * next; // intrusive link list field
43
44 union {
45 thread_desc * thrd; // thrd who created event
46 processor * proc; // proc who created event
47 };
48
49 bool set :1; // whether or not the alarm has be registered
50 bool kernel_alarm :1; // true if this is not a user defined alarm
51};
52
53typedef alarm_node_t ** __alarm_it_t;
54
55void ?{}( alarm_node_t & this, thread_desc * thrd, __cfa_time_t alarm = 0`cfa_s, __cfa_time_t period = 0`cfa_s );
56void ?{}( alarm_node_t & this, processor * proc, __cfa_time_t alarm = 0`cfa_s, __cfa_time_t period = 0`cfa_s );
57void ^?{}( alarm_node_t & this );
58
59struct alarm_list_t {
60 alarm_node_t * head;
61 __alarm_it_t tail;
62};
63
64static inline void ?{}( alarm_list_t & this ) with( this ) {
65 head = 0;
66 tail = &head;
67}
68
69void insert( alarm_list_t * this, alarm_node_t * n );
70alarm_node_t * pop( alarm_list_t * this );
71
72void register_self ( alarm_node_t * this );
73void unregister_self( alarm_node_t * this );
74
75// Local Variables: //
76// mode: c //
77// tab-width: 6 //
78// End: //
Note: See TracBrowser for help on using the repository browser.