/[svn]/linuxsampler/trunk/src/common/ChangeFlagRelaxed.h
ViewVC logotype

Annotation of /linuxsampler/trunk/src/common/ChangeFlagRelaxed.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2448 - (hide annotations) (download) (as text)
Fri May 3 14:26:32 2013 UTC (10 years, 11 months ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 1137 byte(s)
* Immediately apply scale tuning changes to active voices.
* Exposed scale tuning to C++ API (along to the already existing standard
  SysEx way).
* Bumped version to 1.0.0.svn21

1 schoenebeck 2448 /*
2     Copyright (C) 2013 Christian Schoenebeck
3     */
4    
5     #ifndef LS_CHANGEFLAGRELAXED_H
6     #define LS_CHANGEFLAGRELAXED_H
7    
8     #include "atomic.h"
9    
10     /**
11     * May be used as boolean variable to synchronize that some shared resource has
12     * been changed, with relaxed memory order. It is designed for exactly 1 reading
13     * thread (calling readAndReset()) and n writing threads (calling raise()).
14     * Synchronization with "relaxed memory order" means here that the information
15     * written by raise() calls are never lost, but it may take some time to
16     * propagate to the reading thread, thus readAndReset() may not always return
17     * the very latest information. So the informations might be delivered with a
18     * delay.
19     */
20     class ChangeFlagRelaxed {
21     public:
22     ChangeFlagRelaxed() {
23     newval = ATOMIC_INIT(0);
24     oldval = 0;
25     }
26    
27     inline bool readAndReset() {
28     int v = atomic_read(&newval);
29     bool changed = (oldval != v);
30     oldval = v;
31     return changed;
32     }
33    
34     inline void raise() {
35     atomic_inc(&newval);
36     }
37     private:
38     atomic_t newval;
39     int oldval;
40     };
41    
42     #endif // LS_CHANGEFLAGRELAXED_H

  ViewVC Help
Powered by ViewVC