annotate liboctave/util/oct-mutex.h @ 20651:e54ecb33727e

lo-array-gripes.cc: Remove FIXME's related to buffer size. * lo-array-gripes.cc: Remove FIXME's related to buffer size. Shorten sprintf buffers from 100 to 64 characters (still well more than 19 required). Use 'const' decorator on constant value for clarity. Remove extra space between variable and array bracket.
author Rik <rik@octave.org>
date Mon, 12 Oct 2015 21:13:47 -0700
parents 4197fc428c7d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1 /*
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2
19731
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 17822
diff changeset
3 Copyright (C) 2008-2015 Michael Goffioul
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5 This file is part of Octave.
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10 option) any later version.
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15 for more details.
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
20
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
21 */
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22
17822
ebb3ef964372 maint: Use common #define syntax "octave_filename_h" in h_files.
Rik <rik@octave.org>
parents: 17744
diff changeset
23 #if !defined (octave_oct_mutex_h)
ebb3ef964372 maint: Use common #define syntax "octave_filename_h" in h_files.
Rik <rik@octave.org>
parents: 17744
diff changeset
24 #define octave_oct_mutex_h 1
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25
13985
43cc49c7abd1 Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13281
diff changeset
26 #include "oct-refcount.h"
43cc49c7abd1 Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13281
diff changeset
27
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
28 class octave_mutex;
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
29
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
30 class
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
31 octave_base_mutex
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
32 {
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
33 public:
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
34 friend class octave_mutex;
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
35
7957
ba2e00a216e8 Do not use "error" in octave_base_mutex class
John W. Eaton <jwe@octave.org>
parents: 7952
diff changeset
36 octave_base_mutex (void) : count (1) { }
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
37
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
38 virtual ~octave_base_mutex (void) { }
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
39
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
40 virtual void lock (void);
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
41
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
42 virtual void unlock (void);
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
43
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
44 virtual bool try_lock (void);
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
45
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
46 private:
13985
43cc49c7abd1 Use thread-safe atomic reference counting (GCC and MSVC).
Michael Goffioul <michael.goffioul@gmail.com>
parents: 13281
diff changeset
47 octave_refcount<int> count;
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
48 };
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
49
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50 class
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51 OCTAVE_API
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52 octave_mutex
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53 {
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54 public:
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
55 octave_mutex (void);
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
56
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
57 octave_mutex (const octave_mutex& m)
11501
331fcc41ca23 data member initialization fixes
John W. Eaton <jwe@octave.org>
parents: 10312
diff changeset
58 : rep (m.rep)
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
59 {
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
60 rep->count++;
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
61 }
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
62
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
63 ~octave_mutex (void)
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
64 {
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
65 if (--rep->count == 0)
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
66 delete rep;
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
67 }
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
68
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
69 octave_mutex& operator = (const octave_mutex& m)
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
70 {
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
71 if (rep != m.rep)
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
72 {
10312
cbc402e64d83 untabify liboctave header files
John W. Eaton <jwe@octave.org>
parents: 7957
diff changeset
73 if (--rep->count == 0)
cbc402e64d83 untabify liboctave header files
John W. Eaton <jwe@octave.org>
parents: 7957
diff changeset
74 delete rep;
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
75
10312
cbc402e64d83 untabify liboctave header files
John W. Eaton <jwe@octave.org>
parents: 7957
diff changeset
76 rep = m.rep;
cbc402e64d83 untabify liboctave header files
John W. Eaton <jwe@octave.org>
parents: 7957
diff changeset
77 rep->count++;
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
78 }
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
79
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
80 return *this;
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
81 }
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
82
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
83 void lock (void)
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
84 {
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
85 rep->lock ();
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
86 }
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
87
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
88 void unlock (void)
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
89 {
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
90 rep->unlock ();
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
91 }
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
92
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
93 bool try_lock (void)
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
94 {
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
95 return rep->try_lock ();
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
96 }
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
97
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
98 protected:
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
99 octave_base_mutex *rep;
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
100 };
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
101
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
102 class
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
103 octave_autolock
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
104 {
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
105 public:
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
106 octave_autolock (const octave_mutex& m, bool block = true)
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
107 : mutex (m), lock_result (false)
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
108 {
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
109 if (block)
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
110 {
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
111 mutex.lock ();
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
112 lock_result = true;
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
113 }
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
114 else
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
115 lock_result = mutex.try_lock ();
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
116 }
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118 ~octave_autolock (void)
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
119 {
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
120 if (lock_result)
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
121 mutex.unlock ();
7952
2c0a0edae596 reorganize octave_mutex class
John W. Eaton <jwe@octave.org>
parents: 7943
diff changeset
122 }
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
124 bool ok (void) const { return lock_result; }
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
125
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
126 operator bool (void) const { return ok (); }
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
127
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
128 private:
7936
78400fde223e Support for backend-to-octave event management
John W. Eaton <jwe@octave.org>
parents: 7934
diff changeset
129
78400fde223e Support for backend-to-octave event management
John W. Eaton <jwe@octave.org>
parents: 7934
diff changeset
130 // No copying or default constructor!
78400fde223e Support for backend-to-octave event management
John W. Eaton <jwe@octave.org>
parents: 7934
diff changeset
131 octave_autolock (void);
78400fde223e Support for backend-to-octave event management
John W. Eaton <jwe@octave.org>
parents: 7934
diff changeset
132 octave_autolock (const octave_autolock&);
78400fde223e Support for backend-to-octave event management
John W. Eaton <jwe@octave.org>
parents: 7934
diff changeset
133 octave_autolock& operator = (const octave_autolock&);
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
134
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
135 private:
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
136 octave_mutex mutex;
13281
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
137 bool lock_result;
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
138 };
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
139
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
140 class
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
141 OCTAVE_API
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
142 octave_thread
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
143 {
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
144 public:
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
145 static void init (void);
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
146
834f904a3dcb Add support for full asynchronous graphics toolkit running in a separate
Michael Goffioul <michael.goffioul@gmail.com>
parents: 11523
diff changeset
147 static bool is_octave_thread (void);
7934
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
148 };
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149
5a156ab94dd2 Add octave_mutex class
John W. Eaton <jwe@octave.org>
parents:
diff changeset
150 #endif